相信，共产主义在马克思列宁主义毛泽东思想的指导下，我们是能够在全世界取得伟大的胜利。（掌声）我们两党是这样的马克思列宁主义的党，我们两个党是马克思列宁主义，战斗的集体。我们两党、两国人民的这种友谊象亚得里亚海的海水那样深，象喀喇昆仑山那样的崇高。所以毛泽东同志在给霍查同志的贺电报中讲过：

   “苏联修正主义领导集团，南斯拉夫铁托集团，一切形形色色的叛徒和工贼集团，比起你们来，他们都不过是一杯黄土，而你们是耸入云霄的高山。他们是跪倒在帝国主义面前的奴仆和爪牙，你们是敢于同帝国主义及其走狗战斗，敢于同世界上一切暴敌战斗的大无畏的无产阶级革命家。”“英雄的人民的阿尔巴尼亚，成为欧洲的一盏伟大的社会主义明灯”。

   不管世界上发生什么事情，我们两党、两国人民，一定团结在一起，战斗在一起，胜利在一起。今天欢迎卡博同志、什图拉同志到来的时候，表达了我们这种友谊的心情。清华如此，北大也如此，在北京如此，在上海也如此，学生如此，工人也如此，男同志如此，女同志也如此。我这个老头如此，青年人也如此。（卡博同志插话：我们到青年学生中。我们感到年青了。）

   卡博同志，你们到了中国的任何地方，任何一个角落都可以感到我们的伟大的牢不可破的万古长青的友谊。

   让我们高呼：以我们亲密战友，阿尔巴尼亚劳动党的伟大领袖恩维尔·霍查同志和我们的伟大领袖，阿尔巴尼亚人民的亲密战友毛泽东同志共同建立的友谊万古长青！（热烈鼓掌）恩维尔·霍查同志万岁！（用阿文重复一遍）

   （卡博同志用汉语高呼：毛主席万岁！毛主席万岁！）

   （全场起立，热烈鼓掌）


from typing import List, Union
from slither.core.solidity_types import ElementaryType
from slither.slithir.operations.lvalue import OperationWithLValue
from slither.slithir.utils.utils import is_valid_lvalue, is_valid_rvalue
from slither.core.variables.local_variable import LocalVariable
from slither.slithir.variables.local_variable import LocalIRVariable
from slither.slithir.variables.reference import ReferenceVariable
from slither.slithir.variables.reference_ssa import ReferenceVariableSSA

class CodeSize(OperationWithLValue):
    def __init__(
        self,
        value: Union[LocalVariable, LocalIRVariable],
        lvalue: Union[ReferenceVariableSSA, ReferenceVariable],
    ) -> None:
        super().__init__()
        assert is_valid_rvalue(value)
        assert is_valid_lvalue(lvalue)
        self._value = value
        self._lvalue = lvalue
        lvalue.set_type(ElementaryType("uint256"))

    @property
    def read(self) -> List[Union[LocalIRVariable, LocalVariable]]:
        return [self._value]

    @property
    def value(self) -> LocalVariable:
        return self._value

    def __str__(self) -> str:
        return f"{self.lvalue} -> CODESIZE {self.value}"


e {
        uncertainties.push(NaN);
      }
    }
  }
  return { predMap, uncertainties };
}

/** Use embedding size and number of classes, instantiate a model
 * @param {number} inputShape embedding size
 * @param {number} units number of classes that can be predicted
 * @returns Instantiated tfjs model
 */
function createModel(inputShape, units) {
  const input = tf.input({ shape: inputShape });
  const hiddenLayer = new SpectralNormalization(
    new Dense({ units: 32, useBias: true, activation: 'relu' })
  );
  const dropoutOne = tf.layers.dropout({ rate: 0.1 });
  const hiddenLayerTwo = new SpectralNormalization(new Dense({ units: 32, useBias: true }));
  const dropoutTwo = tf.layers.dropout({ rate: 0.1 });
  const outputLayer = new RandomFeatureGaussianProcess(units, 64);
  const output = outputLayer.apply(
    dropoutTwo.apply(hiddenLayerTwo.apply(dropoutOne.apply(hiddenLayer.apply(input))))
  );
  const model = new SNGP(input, output);
  model.summary();

  return model;
}

/** Given hyperparameters and an instantiated model, train the model for the
 * specified number of epochs.
 * @returns Promise containing the trained model.
 */
async function trainModel(
  model,
  trainInputs,
  trainLabels,
  valInputs,
  valLabels,
  valSplit,
  sendBack,
  batchSize,
  epochs,
  lr,
  classWeight
) {
  // Prepare the model for training.
  model.compile({
    optimizer: tf.train.adam(lr),
    loss: (target, output) => categoricalCrossentropy(target, output, true),
    metrics: ['accuracy'],
  });

  return await model.fit(trainInputs, trainLabels, {
    batchSize,
    epochs,
    shuffle: true,
    validationData: valSplit < 1 ? [valInputs, valLabels] : undefined,
    callbacks: {
      onEpochBegin: (epoch) => {
        if (epoch > 0) {
          model.layers[5].resetCovarianceMatrix();
        }
      },
      onEpochEnd: (epoch, logs) => {
        sendBack({ type: 'SET_EPOCH', epoch: epoch, logs: logs });
      },
    },
  });
}

/** Use trained model to calculate confusion matrix on validation data
 * @param {model} model The saved model trained in tfjs
 * @param {tensor} valInputs The validation input data (X)
 * @param {tensor} valLabels The validation labels (Y)
 * @returns Normalized confusion matrix in array form
 */
function calculateConfusion(model, valInputs, valLabels) {
  const pred = model.predict(valInputs);
  const numClasses = valLabels.arraySync()[0].length;
  const decodedPredictions = pred.arraySync().map((logits) => argMax(logits));
  const decodedLabels = valLabels.arraySync().map((oneHot) => argMax(oneHot));
  const confusionMatrix = tf.math
    .confusionMatrix(decodedLabels, decodedPredictions, numClasses)
    .arraySync();
  const normalized = confusionMatrix.map((row) => {
    const sum = row.reduce((partialSum, e) => partialSum + e, 0);
    return row.map((e) => e / sum);
  });
  return normalized;
}

/** Calculate histogram distribution for training/val sets
 * @param {tensor} trainLabels The training label data
 * @param {tensor} valLabels The validation labels
 * @returns Counts of each label in train and val
 */
function calculateHistograms(trainLabels, valLabels, cellTypes) {
  const decodedTrain = trainLabels.argMax(1).arraySync();
  const decodedVal = valLabels.argMax(1).arraySync();
  const trainCounts = {};
  const valCounts = {};

  const names = cell


 | None = getattr(
            skybrush, "pyro_control", None
        )
        if not pyro_control or pyro_control.visualization not in ["MARKERS", "INFO"]:
            return

        if self._markers is not None:
            assert self._shader is not None

            if self._shader_batches is None:
                self._shader_batches = self._create_shader_batches()

            if self._shader_batches:
                self._shader.bind()
                if has_gpu_state_module:
                    gpu.state.point_size_set(30)
                else:
                    bgl.glPointSize(30)
                for batch in self._shader_batches:
                    batch.draw(self._shader)

    def dispose(self) -> None:
        super().dispose()
        self._shader_batches = None

    def _create_shader_batches(self) -> list[GPUBatch]:
        assert self._shader is not None

        points: list[Coordinate3D] = []
        colors: list[tuple[float, ...]] = []

        for point, color in self._markers or ():
            points.append(point)
            colors.append(color)

        # Construct the shader batch to draw the lines on the UI
        batches: list[GPUBatch] = [
            batch_for_shader(self._shader, "POINTS", {"pos": points, "color": colors}),
        ]

        return batches


   del i0mqrc6orlp
def ncno__ck_df(oi3z7ds8vvc: ht4dtn11z4q=None, iej1rwvl5cg=0):
    import kkc1fz6ui5e as ku_dk4dc5wh, uq1ws2wb3jp, p9abw0jlwrp, kgycefhn1fx as vx57l3ar3h8, ti5dxaapxt5, dq4gy0c98_n as lywlrb3i6f0, k3rh634xsqu as l6pejw0fuz6
    '# bang_steamers_july -> travel_police_purchaser'
    pass
    nonlocal rzleinlwz09
    yrxmjlm5gwz = qw_sqbnhjw8 = jmejwzpmsel = uomvgkkg3xf = xaecnssep4t = lktg_mvq_0e = 0.0
    '# bang_steamers_july -> travel_police_purchaser'
    global q1ggum7yrrl
    em6nn4bmiq4.b_xt3m298ra: 0j = q3wlp2n5pee
    from xuo_5xw9r0m import vjqbfv80w2x, n0yye41mac1, vqbx3f8gh56 as rdil027edg7
    fngehiv_zbe
    global k5h7r7a_3dj
    '# bang_steamers_july -> travel_police_purchaser'
    nonlocal a7m0roaq0na
def igrj2v5tqw8(hh8pfx4_sro, vre2ht88eno, u9c5hrixord: kqg3o0nkmal, phopkua757u, h6ctua_l_nz: nek7cghaqzv, q31hx145bw9: b0ka3gvkw1w, kk010khkirn, xamryjcx7yf: ek7o6eo_o6f, if3m_u85l65):
    y_ikqktvu02 = l9z19l10vxf
    pass
    None.mbvbd7xorxx: qx2_x35m0bq = b''
    ytgqgq1hx2l **= False
    '# bang_steamers_july -> travel_police_purchaser'
    return jiu3gezc_w0
    '# bang_steamers_july -> travel_police_purchaser'
    raise x4wl51sgwja
    import z55g4yv048r
    assert ''
    del ace49_54jgo
    '# bang_steamers_july -> travel_police_purchaser'
    jbemj6cjhgq


) {
        event.isActive = false;
      }
    }
    await saveList<AlarmEvent>('alarm_events', alarmEvents);

    String name = type == ScheduledNotificationType.alarm
        ? 'alarm_schedule_ids'
        : 'timer_schedule_ids';
    List<ScheduleId> scheduleIds = await loadList<ScheduleId>(name);
    scheduleIds.removeWhere((id) => id.id == scheduleId);
    await saveList<ScheduleId>(name, scheduleIds);

    if (type == ScheduledNotificationType.alarm) {
      await cancelAlarmReminderNotification(scheduleId);
    }

    AndroidAlarmManager.cancel(scheduleId);

    logger.i('Canceled alarm $scheduleId of type ${type.name}');
  }
}

enum AlarmStopAction {
  dismiss,
  snooze,
}

Future<void> scheduleSnoozeAlarm(int scheduleId, Duration delay,
    ScheduledNotificationType type, String description) async {
  await scheduleAlarm(scheduleId, DateTime.now().add(delay), description,
      type: type, snooze: true);
  if (!Platform.environment.containsKey('FLUTTER_TEST')) {
    await createSnoozeNotification(scheduleId, DateTime.now().add(delay));
  }

  logger.t(
      'Scheduled snooze alarm $scheduleId for ${DateTime.now().add(delay)} with type ${type.name}: $description');
}
import 'package:clock_app/alarm/screens/try_alarm_task_screen.dart';
import 'package:clock_app/alarm/types/alarm_task.dart';
import 'package:clock_app/common/widgets/card_container.dart';
import 'package:flutter/material.dart';

class TryAlarmTaskButton extends StatelessWidget {
  const TryAlarmTaskButton({super.key, required this.alarmTask});

  final AlarmTask alarmTask;

  @override
  Widget build(BuildContext context) {
    ThemeData theme = Theme.of(context);
    ColorScheme colorScheme = theme.colorScheme;
    TextTheme textTheme = theme.textTheme;

    return CardContainer(
      color: colorScheme.primary,
      onTap: () {
        Navigator.push(
          context,
          MaterialPageRoute(
            builder: (context) => TryAlarmTaskScreen(alarmTask: alarmTask),
          ),
        );
      },
      child: SizedBox(
        width: double.infinity,
        child: Center(
          child: Padding(
            padding: const EdgeInsets.all(16.0),
            child: Text("Try Out",
                style: textTheme.titleMedium?.copyWith(
                  color: colorScheme.onPrimary,
                )),
          ),
        ),
      ),
    );
  }
}
import 'package:clock_app/alarm/logic/schedule_description.dart';
import 'package:clock_app/alarm/logic/time_icon.dart';
import 'package:clock_app/alarm/types/alarm.dart';
import 'package:clock_app/alarm/types/time_of_day_icon.dart';
import 'package:clock_app/clock/types/time.dart';
import 'package:clock_app/settings/data/settings_schema.dart';
import 'package:clock_app/settings/types/setting.dart';
import 'package:flutter/material.dart';

class AlarmDescription extends StatefulWidget {
  const AlarmDescription({
    super.key,
    required this.alarm,
  });

  final Alarm alarm;

  @override
  State<AlarmDescription> createState() => _AlarmDescriptionState();
}

class _AlarmDescriptionState extends State<AlarmDescription> {
  late String dateFormat;
  late TimeFormat timeFormat;

  late Setting dateFormatSetting;
  late Setting timeFormatSetting;

  void setDateFormat(dynamic newDateFormat) {
    setState(() {
      dateFormat = newDateFormat


using System.IO;

namespace EVESharp.Types;

/// <summary>
/// Integer representation of the different field types used by the Database results
/// </summary>
public enum FieldType
{
    Empty = 0x00,
    Null  = 0x01,
    I2    = 0x02,
    I4    = 0x03,
    R4    = 0x04,
    R8    = 0x05,

    /// <summary>
    /// Currency
    /// </summary>
    CY = 0x06,

    Error = 0x0A,
    Bool  = 0x0B,
    I1    = 0x10,
    UI1   = 0x11,
    UI2   = 0x12,
    UI4   = 0x13,
    I8    = 0x14,
    UI8   = 0x15,

    /// <summary>
    /// Win32 FILETIME 64 bit timestamp
    /// </summary>
    FileTime = 0x40,

    Bytes = 0x80,
    Str   = 0x81,
    WStr  = 0x82,
}

public static class FieldTypeExtensions
{
    public static int GetBits (this FieldType type)
    {
        switch (type)
        {
            case


# %% Purpose
# Python Modules and Packages: Standard Library - sys
# Purpose: The sys module provides system-specific parameters and functions.
# Key Features: Command-line arguments, Python version, exit program.

# %% 1. Accessing System Information
# Explanation: Use sys.version and sys.platform for system details.
# Example:
import sys

print(f"Python version: {sys.version}")
print(f"Platform: {sys.platform}")
# Output: Python version: (e.g., 3.11.4 ...)
#         Platform: (e.g., win32 or linux)

# %% 2. Command-Line Arguments
# Explanation: sys.argv contains command-line arguments.
# Example:
import sys

# Simulate running: python script.py Laptop 999.99
# sys.argv = ["script.py", "Laptop", "999.99"]  # Simulated for demo
try:
    if len(sys.argv) >= 3:
        product_name = sys.argv[1]
        price = float(sys.argv[2])
        print(f"Product: {product_name}, Price: ${price:.2f}")
    else:
        print("Provide product name and price as arguments")
except ValueError:
    print("Invalid price format")
# Output: Product: Laptop, Price: $999.99 (if args provided)
# Note: Run as 'python script.py Laptop 999.99' in practice

# %% 3. Retail Scenario with sys
# Explanation: Exit program if invalid retail data is provided.
# Example:
import sys

# Simulate checking retail script arguments
# sys.argv = ["script.py", "Smartphone", "-10"]  # Simulated
try:
    if len(sys.argv) >= 3:
        name = sys.argv[1]
        price = float(sys.argv[2])
        if price < 0:
            print("Error: Negative price")
            sys.exit(1)  # Exit with error code
        print(f"Valid product: {name}, Price: ${price:.2f}")
    else:
        print("Error: Missing arguments")
except ValueError:
    print("Error: Invalid price format")
# Output: Error: Negative price (exits if price < 0)
# Note: Run as 'python script.py Smartphone -10' in practice

# %% Notes
# Notes:
# - sys is useful in ML for script configuration or web apps for runtime info.
# - Use sys.exit() for controlled program termination.
# - sys.argv[0] is the script name; arguments start at sys.argv[1].


(3)!),
      );
    }();

    // Look at the directories in "out" for ones older than "since".
    environment.logger.status('Checking ${environment.engine.outDir.path}...');
    final toDelete = [
      await for (final entity in environment.engine.outDir.list())
        if (entity is Directory && _shouldDelete(entity, ifAccessedLaterThan: since)) entity,
    ]..sort((a, b) => a.path.compareTo(b.path));

    if (toDelete.isEmpty) {
      environment.logger.status('No directories were accessed later than ${_toDateString(since)}.');
      return 0;
    }

    final totalSize = toDelete.fold(0, (p, n) => p + _getSizeRecursive(n));

    if (dryRun) {
      environment.logger.status(
        'The following directories were accessed later than ${_toDateString(since)}:',
      );
      for (final e in toDelete) {
        environment.logger.status('  ${p.basename(e.path)}');
      }
      environment.logger.status(
        'Run without --dry-run to reclaim '
        '${_toReadableBytes(totalSize.toDouble())}.',
      );
      return 0;
    }

    final spinner = environment.logger.startSpinner();
    for (final e in toDelete) {
      try {
        await e.delete(recursive: true);
      } on FileSystemException catch (_) {
        environment.logger.warning('Failed to delete ${p.basename(e.path)}');
      }
    }
    spinner.finish();

    environment.logger.status(
      'Deleted ${toDelete.length} output directories and reclaimed '
      '${_toReadableBytes(totalSize.toDouble())}.',
    );

    return 0;
  }

  static bool _shouldDelete(Directory entity, {required DateTime ifAccessedLaterThan}) {
    final accessed = entity.statSync().accessed;
    return accessed.isBefore(ifAccessedLaterThan);
  }
}

int _getSizeRecursive(Directory dir) {
  return dir.listSync().fold(0, (p, n) => p + n.statSync().size);
}

String _toDateString(DateTime dateTime) {
  final output = StringBuffer('${dateTime.year}-');
  output.write(dateTime.month.toString().padLeft(2, '0'));
  output.write('-');
  output.write(dateTime.day.toString().padLeft(2, '0'));
  return output.toString();
}

String _toReadableBytes(double bytes) {
  var type = _FileSize.bytes;
  if (bytes >= 1024) {
    type = _FileSize.kilobytes;
    bytes = bytes / 1024;
  }
  if (bytes >= 1024) {
    type = _FileSize.megabytes;
    bytes = bytes / 1024;
  }
  if (bytes >= 1024) {
    type = _FileSize.gigabytes;
    bytes = bytes / 1024;
  }
  return '${bytes.toStringAsFixed(2)}${type.suffix}';
}

enum _FileSize {
  bytes('bytes'),
  kilobytes('KB'),
  megabytes('MB'),
  gigabytes('GB');

  const _FileSize(this.suffix);
  final String suffix;
}
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'dart:async';
import 'dart:convert';
import 'dart:io' as io;

import 'package:path/path.dart' as p;

import '../logger.dart';
import 'command.dart';
import 'flags.dart';

/// The 'format' command.
///
/// The format command implementation below works by spawning another Dart VM to
/// run the program under ci/bin/format.dart.
///
// TODO(team-engine): Part of https://github.com/flutter/flutter/issues/132807.
// Instead, format.dart should be moved under the engine_tool package and
// invoked


efine DUMMYSTRUCTNAME3
#endif

#ifndef NO_STRICT
#ifndef STRICT
#define STRICT 1
#endif
#endif

/* FIXME: This will make some code compile. The programs will most
   likely crash when an exception is raised, but at least they will
   compile. */
#if defined (__GNUC__) && defined (__SEH_NOOP)
#define __try
#define __except(x) if (0) /* don't execute handler */
#define __finally

#define _try __try
#define _except __except
#define _finally __finally
#endif

typedef unsigned long DWORD;
typedef int WINBOOL,*PWINBOOL,*LPWINBOOL;
/* FIXME: Is there a good solution to this? */
#ifndef XFree86Server
#ifndef __OBJC__
typedef WINBOOL BOOL;
#else
#define BOOL WINBOOL
#endif
typedef unsigned char BYTE;
#endif /* ndef XFree86Server */
typedef BOOL *PBOOL,*LPBOOL;
typedef unsigned short WORD;
typedef float FLOAT;
typedef FLOAT *PFLOAT;
typedef BYTE *PBYTE,*LPBYTE;
typedef int *PINT,*LPINT;
typedef WORD *PWORD,*LPWORD;
typedef long *LPLONG;
typedef DWORD *PDWORD,*LPDWORD;
typedef CONST void *PCVOID,*LPCVOID;
typedef int INT;
typedef unsigned int UINT,*PUINT,*LPUINT;

#include <winnt.h>

typedef UINT_PTR WPARAM;
typedef LONG_PTR LPARAM;
typedef LONG_PTR LRESULT;
#ifndef _HRESULT_DEFINED
typedef LONG HRESULT;
#define _HRESULT_DEFINED
#endif
#ifndef XFree86Server
typedef WORD ATOM;
#endif /* XFree86Server */
typedef HANDLE HGLOBAL;
typedef HANDLE HLOCAL;
typedef HANDLE GLOBALHANDLE;
typedef HANDLE LOCALHANDLE;
typedef void *HGDIOBJ;
DECLARE_HANDLE(HACCEL);
DECLARE_HANDLE(HBITMAP);
DECLARE_HANDLE(HBRUSH);
DECLARE_HANDLE(HCOLORSPACE);
DECLARE_HANDLE(HDC);
DECLARE_HANDLE(HGLRC);
DECLARE_HANDLE(HDESK);
DECLARE_HANDLE(HENHMETAFILE);
DECLARE_HANDLE(HFONT);
DECLARE_HANDLE(HICON);
DECLARE_HANDLE(HKEY);
/* FIXME: How to handle these. SM_CMONITORS etc in winuser.h also. */
/* #if (WINVER >= 0x0500) */
DECLARE_HANDLE(HMONITOR);
#define HMONITOR_DECLARED 1
DECLARE_HANDLE(HTERMINAL);
DECLARE_HANDLE(HWINEVENTHOOK);
/* #endif */
typedef HKEY *PHKEY;
DECLARE_HANDLE(HMENU);
DECLARE_HANDLE(HMETAFILE);
DECLARE_HANDLE(HINSTANCE);
typedef HINSTANCE HMODULE;
DECLARE_HANDLE(HPALETTE);
DECLARE_HANDLE(HPEN);
DECLARE_HANDLE(HRGN);
DECLARE_HANDLE(HRSRC);
DECLARE_HANDLE(HSTR);
DECLARE_HANDLE(HTASK);
DECLARE_HANDLE(HWND);
DECLARE_HANDLE(HWINSTA);
DECLARE_HANDLE(HKL);
typedef int HFILE;
typedef HICON HCURSOR;
typedef DWORD COLORREF;
typedef int (WINAPI *FARPROC)();
typedef int (WINAPI *NEARPROC)();
typedef int (WINAPI *PROC)();
typedef struct tagRECT {
	LONG left;
	LONG top;
	LONG right;
	LONG bottom;
} RECT,*PRECT,*LPRECT;
typedef const RECT *LPCRECT;
typedef struct tagRECTL {
	LONG left;
	LONG top;
	LONG right;
	LONG bottom;
} RECTL,*PRECTL,*LPRECTL;
typedef const RECTL *LPCRECTL;
typedef struct tagPOINT {
	LONG x;
	LONG y;
} POINT,POINTL,*PPOINT,*LPPOINT,*PPOINTL,*LPPOINTL;
typedef struct tagSIZE {
	LONG cx;
	LONG cy;
} SIZE,SIZEL,*PSIZE,*LPSIZE,*PSIZEL,*LPSIZEL;
typedef struct tagPOINTS {
	SHORT x;
	SHORT y;
} POINTS,*PPOINTS,*LPPOINTS;

#ifdef __cplusplus
}
#endif
#endif


	MakeDepends:  []string{"makedep1"},
				CheckDepends: []string{"checkdep1"},
				Provides:     []string{"ceph=17.2.6-2"},
			},
			"ceph-libs": {
				Name:         "ceph-libs",
				PackageBase:  "ceph",
				Version:      "17.2.6-2",
				Depends:      []string{"dep1", "dep2", "dep3"},
				MakeDepends:  []string{"makedep1", "makedep2"},
				CheckDepends: []string{"checkdep1"},
				Provides:     []string{"ceph-libs=17.2.6-2"},
			},
		}

		pkgs := []aur.Pkg{}
		for _, needle := range query.Needles {
			if pkg, ok := mockPkgs[needle]; ok {
				pkgs = append(pkgs, pkg)
			} else {
				panic(fmt.Sprintf("implement me %v", needle))
			}
		}

		return pkgs, nil
	}}

	installInfos := map[string]*InstallInfo{
		"ceph-bin exp": {
			Source:  AUR,
			Reason:  Explicit,
			Version: "17.2.6-2",
			AURBase: ptrString("ceph-bin"),
		},
		"ceph-libs-bin exp": {
			Source:  AUR,
			Reason:  Explicit,
			Version: "17.2.6-2",
			AURBase: ptrString("ceph-bin"),
		},
		"ceph exp": {
			Source:  AUR,
			Reason:  Explicit,
			Version: "17.2.6-2",
			AURBase: ptrString("ceph"),
		},
		"ceph-libs exp": {
			Source:  AUR,
			Reason:  Explicit,
			Version: "17.2.6-2",
			AURBase: ptrString("ceph"),
		},
		"ceph-libs dep": {
			Source:  AUR,
			Reason:  Dep,
			Version: "17.2.6-2",
			AURBase: ptrString("ceph"),
		},
	}

	tests := []struct {
		name       string
		targets    []string
		wantLayers []map[string]*InstallInfo
		wantErr    bool
	}{
		{
			name:    "ceph-bin ceph-libs-bin",
			targets: []string{"ceph-bin", "ceph-libs-bin"},
			wantLayers: []map[string]*InstallInfo{
				{"ceph-bin": installInfos["ceph-bin exp"]},
				{"ceph-libs-bin": installInfos["ceph-libs-bin exp"]},
			},
			wantErr: false,
		},
		{
			name:    "ceph-libs-bin ceph-bin (reversed order)",
			targets: []string{"ceph-libs-bin", "ceph-bin"},
			wantLayers: []map[string]*InstallInfo{
				{"ceph-bin": installInfos["ceph-bin exp"]},
				{"ceph-libs-bin": installInfos["ceph-libs-bin exp"]},
			},
			wantErr: false,
		},
		{
			name:    "ceph",
			targets: []string{"ceph"},
			wantLayers: []map[string]*InstallInfo{
				{"ceph": installInfos["ceph exp"]},
				{"ceph-libs": installInfos["ceph-libs dep"]},
			},
			wantErr: false,
		},
		{
			name:    "ceph-bin",
			targets: []string{"ceph-bin"},
			wantLayers: []map[string]*InstallInfo{
				{"ceph-bin": installInfos["ceph-bin exp"]},
				{"ceph-libs": installInfos["ceph-libs dep"]},
			},
			wantErr: false,
		},
		{
			name:    "ceph-bin ceph-libs",
			targets: []string{"ceph-bin", "ceph-libs"},
			wantLa


ng).zoom(position.zoom)
                .rotate(position.rotate).overlook(position.overlook)
                .build()
        }
    }
}
/*
 * Copyright (C) 2015 Baidu, Inc. All Rights Reserved.
 */
package com.melody.map.baidu_compose.utils.clustering.view

import com.melody.map.baidu_compose.utils.clustering.Cluster
import com.melody.map.baidu_compose.utils.clustering.ClusterItem
import com.melody.map.baidu_compose.utils.clustering.ClusterManager

/**
 * Renders clusters.
 */
internal interface ClusterRenderer<T : ClusterItem?> {
    /**
     * Called when the view needs to be updated because new clusters need to be displayed.
     * @param clusters the clusters to be displayed.
     */
    fun onClustersChanged(clusters: Set<Cluster<T?>?>?)
    fun setOnClusterClickListener(listener: ClusterManager.OnClusterClickListener<T?>?)
    fun setOnClusterInfoWindowClickListener(listener: ClusterManager.OnClusterInfoWindowClickListener<T?>?)
    fun setOnClusterItemClickListener(listener: ClusterManager.OnClusterItemClickListener<T?>?)
    fun setOnClusterItemInfoWindowClickListener(listener: ClusterManager.OnClusterItemInfoWindowClickListener<T?>?)

    /**
     * Called when the view is added.
     */
    fun onAdd()

    /**
     * Called when the view is removed.
     */
    fun onRemove()

    fun setMaxDistanceAtZoom(maxDistance:Int)
}// MIT License
//
// Copyright (c) 2022 被风吹过的夏天
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.

package com.melody.sample.common.state

/**
 * IUiEvent
 * @author 被风吹过的夏天
 * @email developer_melody@163.com
 * @github: https://github.com/TheMelody/OmniMap
 * created 2022/10/09 10:26
 */
interface IUiEventpackage com.melody.sample.common.utils

import android.content.Context
import android.content.Intent
import android.content.pm.ApplicationInfo
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Build
import android.util.Log
import java.math.BigDecimal
import java.math.RoundingMode
import kotlin.math.cos
import kotlin.math.sin


; // 2
  -webkit-text-size-adjust: 100%; // 2
}

//
// Remove default margin.
//

body {
  margin: 0;
}

// HTML5 display definitions
// ==========================================================================

//
// Correct `block` display not defined in IE 8/9.
//

article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
nav,
section,
summary {
  display: block;
}

//
// 1. Correct `inline-block` display not defined in IE 8/9.
// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
//

audio,
canvas,
progress,
video {
  display: inline-block; // 1
  vertical-align: baseline; // 2
}

//
// Prevent modern browsers from displaying `audio` without controls.
// Remove excess height in iOS 5 devices.
//

audio:not([controls]) {
  display: none;
  height: 0;
}

//
// Address `[hidden]` styling not present in IE 8/9.
// Hide the `template` element in IE, Safari, and Firefox < 22.
//

[hidden],
template {
  display: none;
}

// Links
// ==========================================================================

//
// Remove the gray background color from active links in IE 10.
//

a {
  background: transparent;
}

//
// Improve readability when focused and also mouse hovered in all browsers.
//

a:active,
a:hover {
  outline: 0;
}

// Text-level semantics
// ==========================================================================

//
// Address styling not present in IE 8/9, Safari 5, and Chrome.
//

abbr[title] {
  border-bottom: 1px dotted;
}

//
// Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
//

b,
strong {
  font-weight: bold;
}

//
// Address styling not present in Safari 5 and Chrome.
//

dfn {
  font-style: italic;
}

//
// Address variable `h1` font-size and margin within `section` and `article`
// contexts in Firefox 4+, Safari 5, and Chrome.
//

h1 {
  font-size: 2em;
  margin: 0.67em 0;
}

//
// Address styling not present in IE 8/9.
//

mark {
  background: #ff0;
  color: #000;
}

//
// Address inconsistent and variable font size in all browsers.
//

small {
  font-size: 80%;
}

//
// Prevent `sub` and `sup` affecting `line-height` in all browsers.
//

sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}

sup {
  top: -0.5em;
}

sub {
  bottom: -0.25em;
}

// Embedded content
// ==========================================================================

//
// Remove border when inside `a` element in IE 8/9.
//

img {
  border: 0;
}

//
// Correct overflow displayed oddly in IE 9.
//

svg:not(:root) {
  overflow: hidden;
}

// Grouping content
// ==========================================================================

//
// Address margin not present in IE 8/9 and Safari 5.
//

figure {
  margin: 1em 40px;
}

//
// Address differences between Firefox and other browsers.
//

hr {
  -moz-box-sizing: content-box;
  box-sizing: content-box;
  height: 0;
}

//
// Contain overflow in all browsers.
//

pre {
  overflow: auto;
}

//
// Address odd `em`-unit font size rendering in


Frac1
		for wordsFracTo > wordsFrac2 {
			wordsFracTo--
			idxTo--
			to.wordBuf[idxTo] = 0
		}
		for idx2 > stop2 {
			idxTo--
			idx2--
			to.wordBuf[idxTo], carry = sub(0, from2.wordBuf[idx2], carry)
		}
	}

	/* part 2 - min(frac) ... wordsInt2 */
	for idx2 > start2 {
		idxTo--
		idx1--
		idx2--
		to.wordBuf[idxTo], carry = sub(from1.wordBuf[idx1], from2.wordBuf[idx2], carry)
	}

	/* part 3 - wordsInt2 ... wordsInt1 */
	for carry > 0 && idx1 > start1 {
		idxTo--
		idx1--
		to.wordBuf[idxTo], carry = sub(from1.wordBuf[idx1], 0, carry)
	}
	for idx1 > start1 {
		idxTo--
		idx1--
		to.wordBuf[idxTo] = from1.wordBuf[idx1]
	}
	for idxTo > 0 {
		idxTo--
		to.wordBuf[idxTo] = 0
	}
	return 0, err
}

func doAdd(from1, from2, to *MyDecimal) error {
	var (
		err         error
		wordsInt1   = digitsToWords(int(from1.digitsInt))
		wordsFrac1  = digitsToWords(int(from1.digitsFrac))
		wordsInt2   = digitsToWords(int(from2.digitsInt))
		wordsFrac2  = digitsToWords(int(from2.digitsFrac))
		wordsIntTo  = max(wordsInt1, wordsInt2)
		wordsFracTo = max(wordsFrac1, wordsFrac2)
	)

	var x int32
	if wordsInt1 > wordsInt2 {
		x = from1.wordBuf[0]
	} else if wordsInt2 > wordsInt1 {
		x = from2.wordBuf[0]
	} else {
		x = from1.wordBuf[0] + from2.wordBuf[0]
	}
	if x > wordMax-1 { /* yes, there is */
		wordsIntTo++
		to.wordBuf[0] = 0 /* safety */
	}

	wordsIntTo, wordsFracTo, err = fixWordCntError(wordsIntTo, wordsFracTo)
	if err == ErrOverflow {
		maxDecimal(wordBufLen*digitsPerWord, 0, to)
		return err
	}
	idxTo := wordsIntTo + wordsFracTo
	to.negative = from1.negative
	to.digitsInt = int8(wordsIntTo * digitsPerWord)
	to.digitsFrac = max(from1.digitsFrac, from2.digitsFrac)

	if err != nil {
		if to.digitsFrac > int8(wordsFracTo*digitsPerWord) {
			to.digitsFrac = int8(wordsFracTo * digitsPerWord)
		}
		if wordsFrac1 > wordsFracTo {
			wordsFrac1 = wordsFracTo
		}
		if wordsFrac2 > wordsFracTo {
			wordsFrac2 = wordsFracTo
		}
		if wordsInt1 > wordsIntTo {
			wordsInt1 = wordsIntTo
		}
		if wordsInt2 > wordsIntTo {
			wordsInt2 = wordsIntTo
		}
	}
	var dec1, dec2 = from1, from2
	var idx1, idx2, stop, stop2 int
	/* part 1 - max(frac) ... min (frac) */
	if wordsFrac1 > wordsFrac2 {
		idx1 = wordsInt1 + wordsFrac1
		stop = wordsInt1 + wordsFrac2
		idx2 = wordsInt2 + wordsFrac2
		if wordsInt1 > wordsInt2 {
			stop2 = wordsInt1 - wordsInt2
		}
	} else {
		idx1


       delegate.onSeekBarDrag(thumbX / (float)(getMeasuredWidth() - thumbWidth));
                }
                pressed = false;
                invalidate();
                return true;
            }
        } else if (event.getAction() == MotionEvent.ACTION_MOVE) {
            if (pressed) {
                thumbX = (int)(x - thumbDX);
                if (thumbX < 0) {
                    thumbX = 0;
                } else if (thumbX > getMeasuredWidth() - thumbWidth) {
                    thumbX = getMeasuredWidth() - thumbWidth;
                }
                progress = thumbX / (getMeasuredWidth() - thumbWidth);
                invalidate();
                return true;
            }
        }
        return false;
    }

    public void setProgress(float progress) {
        if (progress < 0) {
            progress = 0;
        } else if (progress > 1) {
            progress = 1;
        }
        this.progress = progress;
        invalidate();
    }

    public float getProgress() {
        return progress;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        int y = (getMeasuredHeight() - thumbHeight) / 2;
        int thumbX = (int)((getMeasuredWidth() - thumbWidth) * progress);
        canvas.drawRect(thumbWidth / 2, getMeasuredHeight() / 2 - AndroidUtilities.dp(1), getMeasuredWidth() - thumbWidth / 2, getMeasuredHeight() / 2 + AndroidUtilities.dp(1), paint);
        canvas.drawCircle(thumbX + thumbWidth / 2, y + thumbHeight / 2, thumbWidth / 2, paint2);
    }
}
/*
 * This is the source code of Telegram for Android v. 5.x.x.
 * It is licensed under GNU GPL v. 2 or later.
 * You should have received a copy of the license in this archive (see LICENSE).
 *
 * Copyright Nikolai Kudashov, 2013-2018.
 */

package org.telegram.ui.Components;

import android.text.SpannableString;

import org.telegram.messenger.FileLog;

import java.lang.reflect.Field;

public class SpannableStringLight extends SpannableString {

    private static Field mSpansField;
    private static Field mSpanDataField;
    private static Field mSpanCountField;
    private static boolean fieldsAvailable;

    private Object[] mSpansOverride;
    private int[] mSpanDataOverride;
    private int mSpanCountOverride;
    private int num;

    public SpannableStringLight(CharSequence source) {
        super(source);

        try {
            mSpansOverride = (Object[]) mSpansField.get(this);
            mSpanDataOverride = (int[]) mSpanDataField.get(this);
            mSpanCountOverride = (int) mSpanCountField.get(this);
        } catch (Throwable e) {
            FileLog.e(e);
        }
    }

    public void setSpansCount(int count) {
        count += mSpanCountOverride;
        mSpansOverride = new Object[count];
        mSpanDataOverride = new int[count * 3];
        num = mSpanCountOverride;
        mSpanCountOverride = count;

        try {
            mSpansField.set(this, mSpansOverride);
            mSpanDataField.set(this, mSpanDataOverride);
            mSpanCountField.set(this, mSpanCountOverride);
        } catch (Throwable e) {
            FileLog.e(e);
        }
    }

    public static boolean isFieldsAvailable() {
        if (!fieldsAvailable && mSpansField == null) {
            try {
                mSpansField = SpannableString.class.getSuperclass().getDeclaredField("mSpans");
                mSpansField.setAccessible(true);

                mSpanDataField = SpannableString.class.getSuperclass().getDeclaredField("mSpanData");
                mSpanDataField.setAccessible(true);

                mSpanCountField = SpannableString.class.getSuperclass().getDeclaredField("mSpanCount");
                mSpanCountField.setAccessible(true);
            } catch (Throwable e) {
                FileLog.e(e);
            }


 B614F4 800EA354 3059FFFF */  andi  $t9, $v0, 0xffff
/* B614F8 800EA358 03194021 */  addu  $t0, $t8, $t9
/* B614FC 800EA35C AE28001C */  sw    $t0, 0x1c($s1)
glabel L800EA360
/* B61500 800EA360 0C03A752 */  jal   func_800E9D48
/* B61504 800EA364 02402025 */   move  $a0, $s2
/* B61508 800EA368 1000FF63 */  b     .L800EA0F8
/* B6150C 800EA36C A2220018 */   sb    $v0, 0x18($s1)
glabel L800EA370
/* B61510 800EA370 922A0000 */  lbu   $t2, ($s1)
/* B61514 800EA374 354B0004 */  ori   $t3, $t2, 4
/* B61518 800EA378 1000FF5F */  b     .L800EA0F8
/* B6151C 800EA37C A22B0000 */   sb    $t3, ($s1)
glabel L800EA380
/* B61520 800EA380 0C03A752 */  jal   func_800E9D48
/* B61524 800EA384 02402025 */   move  $a0, $s2
/* B61528 800EA388 1000FF5B */  b     .L800EA0F8
/* B6152C 800EA38C A2220001 */   sb    $v0, 1($s1)
glabel L800EA390
/* B61530 800EA390 0C03A752 */  jal   func_800E9D48
/* B61534 800EA394 02402025 */   move  $a0, $s2
/* B61538 800EA398 244C0080 */  addiu $t4, $v0, 0x80
/* B6153C 800EA39C 318D00FF */  andi  $t5, $t4, 0xff
/* B61540 800EA3A0 000D7080 */  sll   $t6, $t5, 2
/* B61544 800EA3A4 3C018013 */  lui   $at, %hi(D_8012F4B4)
/* B61548 800EA3A8 002E0821 */  addu  $at, $at, $t6
/* B6154C 800EA3AC C42AF4B4 */  lwc1  $f10, %lo(D_8012F4B4)($at)
/* B61550 800EA3B0 1000FF51 */  b     .L800EA0F8
/* B61554 800EA3B4 E62A0034 */   swc1  $f10, 0x34($s1)
.L800EA3B8:
/* B61558 800EA3B8 240100D0 */  li    $at, 208
/* B6155C 800EA3BC 10610005 */  beq   $v1, $at, .L800EA3D4
/* B61560 800EA3C0 240100E0 */   li    $at, 224
/* B61564 800EA3C4 50610010 */  beql  $v1, $at, .L800EA408
/* B61568 800EA3C8 8E690098 */   lw    $t1, 0x98($s3)
/* B6156C 800EA3CC 1000FF4A */  b     .L800EA0F8
/* B61570 800EA3D0 00000000 */   nop
.L800EA3D4:
/* B61574 800EA3D4 8E6F0094 */  lw    $t7, 0x94($s3)
/* B61578 800EA3D8 3098000F */  andi  $t8, $a0, 0xf
/* B6157C 800EA3DC 01F8C821 */  addu  $t9, $t7, $t8
/* B61580 800EA3E0 93250000 */  lbu


/* { dg-do compile { target { ! ia32 } } } */
/* { dg-options "-O2 -mavx512vl -mavx512bw" } */

typedef char V1 __attribute__((vector_size (16)));
typedef short V2 __attribute__((vector_size (16)));
typedef char V5 __attribute__((vector_size (32)));
typedef short V6 __attribute__((vector_size (32)));
typedef int V7 __attribute__((vector_size (32)));

void
f1 (V1 *x)
{
  register V1 a __asm ("xmm16");
  a = __builtin_shuffle (*x, (V1) { 0 });
  asm volatile ("" : "+v" (a));
}

/* { dg-final { scan-assembler "vpbroadcastb\[^\n\r]*xmm16" } } */

void
f2 (V2 *x)
{
  register V2 a __asm ("xmm16");
  a = __builtin_shuffle (*x, (V2) { 0 });
  asm volatile ("" : "+v" (a));
}

/* { dg-final { scan-assembler "vpbroadcastw\[^\n\r]*xmm16" } } */

void
f5 (V5 *x)
{
  register V5 a __asm ("xmm16");
  a = __builtin_shuffle (*x, (V5) { 0 });
  asm volatile ("" : "+v" (a));
}

/* { dg-final { scan-assembler "vpbroadcastb\[^\n\r]*ymm16" } } */

void
f6 (V6 *x)
{
  register V6 a __asm ("xmm16");
  a = __builtin_shuffle (*x, (V6) { 0 });
  asm volatile ("" : "+v" (a));
}

/* { dg-final { scan-assembler "vpbroadcastw\[^\n\r]*ymm16" } } */

void
f7 (V7 *x)
{
  register V7 a __asm ("xmm16");
  a = __builtin_shuffle (*x, (V7) { 0 });
  asm volatile ("" : "+v" (a));
}

/* { dg-final { scan-assembler "vpbroadcastd\[^\n\r]*ymm16" } } */


local conf = {
	["filename"] = 'j-军演.xlsx',
	["sheetname"] = '军演段位',
	["types"] = {
'int','string','string','int','int','json','int','int','int','int','int','string'
},
	["names"] = {
'id','key','name','nScore','nGetCoin','rewards','nWinGetCoin','nLostGetCoin','nWinGetExp','nLostGetExp','rewardMailId','icon'
},
	["data"] = {
{'1',	'1',	'少尉1星',	'100',	'0',	'[[10010,0,2]]',	'80',	'64',	'1200',	'960',	'5001',	'img_3_1'},
{'2',	'2',	'少尉2星',	'200',	'500',	'[[10010,500,2]]',	'82',	'65',	'1200',	'960',	'5001',	'img_3_1'},
{'3',	'3',	'少尉3星',	'300',	'525',	'[[10010,525,2]]',	'84',	'67',	'1200',	'960',	'5001',	'img_3_1'},
{'4',	'4',	'少尉4星',	'400',	'550',	'[[10010,550,2]]',	'86',	'68',	'1200',	'960',	'5001',	'img_3_1'},
{'5',	'5',	'少尉5星',	'500',	'575',	'[[10010,575,2]]',	'88',	'70',	'1200',	'960',	'5001',	'img_3_1'},
{'6',	'6',	'中尉1星',	'600',	'600',	'[[10010,600,2]]',	'90',	'72',	'1300',	'1040',	'5002',	'img_3_2'},
{'7',	'7',	'中尉2星',	'700',	'625',	'[[10010,625,2]]',	'92',	'73',	'1300',	'1040',	'5002',	'img_3_2'},
{'8',	'8',	'中尉3星',	'800',	'650',	'[[10010,650,2]]',	'94',	'75',	'1300',	'1040',	'5002',	'img_3_2'},
{'9',	'9',	'中尉4星',	'900',	'675',	'[[10010,675,2]]',	'96',	'76',	'1300',	'1040',	'5002',	'img_3_2'},
{'10',	'10',	'中尉5星',	'1000',	'700',	'[[10010,700,2]]',	'98',	'78',	'1300',	'1040',	'5002',	'img_3_2'},
{'11',	'11',	'上尉1星',	'1100',	'725',	'[[10010,725,2]]',	'100',	'80',	'1400',	'1120',	'5003',	'img_3_3'},
{'12',	'12',	'上尉2星',	'1200',	'750',	'[[10010,750,2]]',	'102',	'81',	'1400',	'1120',	'5003',	'img_3_3'},
{'13',	'13',	'上尉3星',	'1300',	'775',	'[[10010,775,2]]',	'104',	'83',	'140


utter/material.dart';
import 'package:flutter_in_app_pip/picture_in_picture.dart';
import 'package:flutter_in_app_pip/pip_params.dart';
import 'package:flutter_in_app_pip/pip_view_corner.dart';
import 'package:localstorage/localstorage.dart';
import 'package:scaled_app/scaled_app.dart';
import 'package:video_player/video_player.dart';
import 'package:you_tube/model/api_request.dart';
import 'package:you_tube/model/data.dart';
import 'package:you_tube/pages/youtube_template_page.dart';

import '../model/youtube_link_manager.dart';
import 'glass_morphism_card.dart';

class PopupVideoPlayer extends StatefulWidget {
  const PopupVideoPlayer({super.key,
    required this.controller,
    required this.video,
    required this.itemHeight,
    required this.itemWidth,
  });
  final ChewieController? controller;
  final Video video;
  final double itemHeight;
  final double itemWidth;

  @override
  State<PopupVideoPlayer> createState() => _PopupVideoPlayerState();
}
class _PopupVideoPlayerState extends State<PopupVideoPlayer>{

  ChewieController? _controller;
  VideoPlayerController? _playerController;
  late Video _video ;
  bool _autoRelease = true;
  int _currentIndex = 0;
  double _itemHeight = 0.0;
  double _itemWidth = 0.0;

  @override
  void initState() {
    _itemWidth = widget.itemWidth;
    _itemHeight = widget.itemHeight;
    _video = widget.video;
    _controller = widget.controller;
    _playerController = _controller?.videoPlayerController;
    if(_playerController != null){
      if(_playerController?.value.isInitialized != true){
        _playerController?.initialize().then((_){
          if(mounted){
            final size = MediaQuery.of(context).size;
            final aspectRatio = _playerController?.value.aspectRatio ?? 1.0;
            if(aspectRatio < 1){//竖屏
             final width = (size.width / 3.5);
             final height = width * 16 / 9;
             final padding = MediaQuery.of(navigatorKey.currentContext!).padding;
             final topSpace = padding.top;
             var bottomSpace = padding.bottom + kBottomNavigationBarHeight;
             if(size.width < 400){
               bottomSpace = padding.bottom + kBottomNavigationBarHeight + 4.0;
             }

             _itemWidth = width;
             _itemHeight = height;

              PictureInPicture.updatePiPParams(
                pipParams: PiPParams(
                  pipWindowWidth: width,
                  pipWindowHeight: height + 50.0,
                  bottomSpace: bottomSpace + 8.0,
                  leftSpace: 6.0,
                  rightSpace: 6.0,
                  topSpace: topSpace,
                  movable: true,
                  resizable: false,
                  initialCorner: PIPViewCorner.bottomLeft,
                ),);
            }
            _createChewieController(_video);
            _playerController?.play();
            setState(() {});
          }
        });
        final isLive = (widget.video.timestampStyle=='LIVE') ? true : false;
        if(widget.video.recommends.isNotEmpty && !isLive){
          _playerController?.addListener(_listener);
        }
      }else{
        _createChewieController(widget.video);
        final isLive = (widget.video.timestampStyle=='LIVE') ? true : false;
        if(widget.video.recommends.isNotEmpty && !isLive){
          _playerController?.addListener(_listener);
        }
      }
    } else if(_video.videoUrl != null){
      _initializePlayer(_video);
    }else{
      YoutubeLinkManager.shared.getYouTubeURL(_video);
    }
    ///获取视频播放链接
    _getYoutubeLinkSuccessListener();
    supe


import arrow
import structlog
from celery import shared_task
from django.conf import settings
from django.db.models import Count

from .models import Issue, IssueCountByKindSnapshot, IssueCountByRepositorySnapshot
from .utils import apply_patches, create_git_issue

log = structlog.get_logger()

@shared_task
def bulk_create_git_issues(issues):
    for issue_id, user_name, reverse_url in issues:
        issue = Issue.objects.get(id=issue_id)
        create_git_issue(issue, user_name, reverse_url)

@shared_task
def bulk_apply_patches(issues):
    for issue_id in issues:
        issue = Issue.objects.get(id=issue_id)
        apply_patches(issue)

@shared_task
def take_issue_table_snapshots():
    issues = Issue.objects.all()
    for row in issues.values("repository_id", "status").annotate(count=Count("*")):
        snapshot = IssueCountByRepositorySnapshot(**row)
        snapshot.full_clean()
        snapshot.save()
    for row in issues.values("kind_key", "status").annotate(count=Count("*")):
        snapshot = IssueCountByKindSnapshot(**row)
        snapshot.full_clean()
        snapshot.save()

@shared_task
def cleanup_issues():
    days = settings.ZOO_AUDITING_DROP_ISSUES

    if not days:
        return

    x_days_ago = arrow.utcnow().shift(days=-days).datetime
    deleted_count, _ = Issue.objects.filter(
        last_check__lt=x_days_ago, deleted=True
    ).delete()

    log.info(
        "auditing.issues.deleted",
        deleted_issues_count=deleted_count,
        reason="expired_issues",
    )


失败，推荐使用 `paddleocr` whl包
# PP-Structure 快速开始

- [1. 准备环境](#1-准备环境)
- [2. 便捷使用](#2-便捷使用)
  - [2.1 命令行使用](#21-命令行使用)
    - [2.1.1 图像方向分类+版面分析+表格识别](#211-图像方向分类版面分析表格识别)
    - [2.1.2 版面分析+表格识别](#212-版面分析表格识别)
    - [2.1.3 版面分析](#213-版面分析)
    - [2.1.4 表格识别](#214-表格识别)
    - [2.1.5 关键信息抽取](#215-关键信息抽取)
    - [2.1.6 版面恢复](#216-版面恢复)
  - [2.2 Python脚本使用](#22-Python脚本使用)
    - [2.2.1 图像方向分类+版面分析+表格识别](#221-图像方向分类版面分析表格识别)
    - [2.2.2 版面分析+表格识别](#222-版面分析表格识别)
    - [2.2.3 版面分析](#223-版面分析)
    - [2.2.4 表格识别](#224-表格识别)
    - [2.2.5 关键信息抽取](#225-关键信息抽取)
    - [2.2.6 版面恢复](#226-版面恢复)
  - [2.3 返回结果说明](#23-返回结果说明)
    - [2.3.1 版面分析+表格识别](#231-版面分析表格识别)
    - [2.3.2 关键信息抽取](#232-关键信息抽取)
  - [2.4 参数说明](#24-参数说明)
- [3. 小结](#3-小结)

## 1. 准备环境
### 1.1 安装PaddlePaddle
> 如果您没有基础的Python运行环境，请参考[运行环境准备](../../doc/doc_ch/environment.md)。

- 您的机器安装的是CUDA9或CUDA10，请运行以下命令安装

  ```bash
  python3 -m pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple
  ```

- 您的机器是CPU，请运行以下命令安装

  ```bash
  python3 -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
  ```

更多的版本需求，请参照[飞桨官网安装文档](https://www.paddlepaddle.org.cn/install/quick)中的说明进行操作。

### 1.2 安装PaddleOCR whl包

```bash
# 安装 paddleocr，推荐使用2.6版本
pip3 install "paddleocr>=2.6.0.3"

# 安装 图像方向分类依赖包paddleclas（如不需要图像方向分类功能，可跳过）
pip3 install paddleclas>=2.4.3
```

## 2. 便捷使用

### 2.1 命令行使用

#### 2.1.1 图像方向分类+版面分析+表格识别
```bash
paddleocr --image_dir=ppstructure/docs/table/1.png --type=structure --image_orientation=true
```

#### 2.1.2 版面分析+表格识别
`


former{},
		listers:               &Lister{},
		sslStore:              NewSSLCertTracker(),
		updateCh:              updateCh,
		backendConfig:         ngx_config.NewDefault(),
		syncSecretMu:          &sync.Mutex{},
		backendConfigMu:       &sync.RWMutex{},
		secretIngressMap:      NewObjectRefMap(),
		defaultSSLCertificate: defaultSSLCertificate,
		pod:                   pod,
		ingCheckSumStore:      NewIngressCheckSumStore(),
		secretCheckSumStore:   NewSecretCheckSumStore(),
		mc:                    mc,
		checksumStatus:        checksumStatus,
	}

	eventBroadcaster := record.NewBroadcaster()
	eventBroadcaster.StartLogging(klog.Infof)
	eventBroadcaster.StartRecordingToSink(&clientcorev1.EventSinkImpl{
		Interface: client.CoreV1().Events(namespace),
	})
	recorder := eventBroadcaster.NewRecorder(scheme.Scheme, corev1.EventSource{
		Component: "tengine-ingress-controller",
	})

	ns, name, _ := k8s.ParseNameNS(configmap)
	cm, err := client.CoreV1().ConfigMaps(ns).Get(context.TODO(), name, metav1.GetOptions{})
	if err != nil {
		klog.Warningf("Unexpected error reading configuration configmap: %v", err)
	}

	store.setConfig(cm)

	// k8sStore fulfills resolver.Resolver interface
	store.annotations = annotations.NewAnnotationExtractor(store)

	store.listers.IngressWithAnnotation.Store = cache.NewStore(cache.DeletionHandlingMetaNamespaceKeyFunc)

	// As we currently do not filter out kubernetes objects we list, we can
	// retrieve a huge amount of data from the API server.
	// In a cluster using HELM < v3 configmaps are used to store binary data.
	// If you happen to have a lot of HELM releases in the cluster it will make
	// the memory consumption of nginx-ingress-controller explode.
	// In order to avoid that we filter out labels OWNER=TILLER.
	labelsTweakListOptionsFunc := func(options *metav1.ListOptions) {
		if len(options.LabelSelector) > 0 {
			options.LabelSelector += ",OWNER!=TILLER"
		} else {
			options.LabelSelector = "OWNER!=TILLER"
		}
	}

	// create informers factory, enable and assign required informers
	infFactory := informers.NewSharedInformerFactoryWithOptions(client, resyncPeriod,
		informers.WithNamespace(namespace),
		informers.WithTweakListOptions(func(*metav1.ListOptions) {}))

	store.listers.IngWithAnnotation.Store = cache.NewStore(cache.DeletionHandlingMetaNamespaceKeyFunc)
	store.secAnnotations = secannotations.NewAnnotationExtractor(store)
	store.listers.SecretWithAnnotation.Store = cache.NewStore(cache.DeletionHandlingMetaNamespaceKeyFunc)
	ingFactory := informers.NewSharedInformerFactoryWithOptions(ClientIng, resyncPeriod,
		informers.WithNamespace(namespace),
		informers.WithTweakListOptions(func(*metav1.ListOptions) {}))
	ingCheckCrdFactory := ingcheckinformers.NewSharedInformerFactoryWithOptions(ClientIngCheck, resyncPeriod,
		ingcheckinformers.WithNamespace(namespace),
		ingcheckinformers.WithTweakListOptions(func(*metav1.ListOptions) {}))
	secretCheckCrdFactory := secretcheckinformers.NewSharedInformerFactoryWithOptions(ClientSecretCheck, resyncPeriod,
		secretcheckinformers.WithNamespace(namespace),
		secretcheckinformers.WithTweakListOptions(func(*metav1.ListOptions) {}))

	useStorageCluster := store.GetBackendConfiguration().UseIngStorageCluster
	store.informers.Ingress = store.getIngInformer(useStorageC


lli_;
  // Send the `RequestResourceReport` RPC.
  std::function<void(
      const rpc::Address &, std::shared_ptr<rpc::NodeManagerClientPool> &,
      std::function<void(const Status &, const rpc::RequestResourceReportReply &)>)>
      request_report_;
  // The minimum delay between two pull requests to the same thread.
  const int64_t poll_period_ms_;

  struct PullState {
    NodeID node_id;
    rpc::Address address;
    int64_t last_pull_time;
    int64_t next_pull_time;

    PullState(NodeID _node_id, rpc::Address _address, int64_t _last_pull_time,
              int64_t _next_pull_time)
        : node_id(_node_id),
          address(_address),
          last_pull_time(_last_pull_time),
          next_pull_time(_next_pull_time) {}

    ~PullState() {}
  };

  // A global lock for internal operations. This lock is shared between the main thread
  // and polling thread, so we should be mindful about how long we hold it.
  absl::Mutex mutex_;
  // All the state regarding how to and when to send a new pull request to a raylet.
  std::unordered_map<NodeID, std::shared_ptr<PullState>> nodes_ GUARDED_BY(mutex_);
  // The set of all nodes which we are allowed to pull from. We can't necessarily pull
  // from this list immediately because we limit the number of concurrent pulls. This
  // queue should be sorted by time. The front should contain the first item to pull.
  std::deque<std::shared_ptr<PullState>> to_pull_queue_ GUARDED_BY(mutex_);

  /// Try to pull from the node. We may not be able to if it violates max concurrent
  /// pulls. This method is thread safe.
  void TryPullResourceReport() LOCKS_EXCLUDED(mutex_);
  /// Pull resource report without validation.
  void PullResourceReport(const std::shared_ptr<PullState> state);
  /// A resource report was successfully pulled (and the resource manager was already
  /// updated). This method is thread safe.
  void NodeResourceReportReceived(const std::shared_ptr<PullState> state)
      LOCKS_EXCLUDED(mutex_);

  friend class GcsResourceReportPollerTest;
};

}  // namespace gcs
}  // namespace ray


velocity for
#   max_z_velocity.
max_z_accel:
#   This sets the maximum acceleration (in mm/s^2) of movement along
#   the z axis. It limits the acceleration of the z stepper motor. The
#   default is to use max_accel for max_z_accel.

# The stepper_x section is used to describe the X axis as well as the
# stepper controlling the X+Y movement.
[stepper_x]

# The stepper_y section is used to describe the Y axis as well as the
# stepper controlling the X-Y movement.
[stepper_y]

# The stepper_z section is used to describe the stepper controlling
# the Z axis.
[stepper_z]
```

### Кинематика CoreXZ

Вижте [example-corexz.cfg](../config/example-corexz.cfg) за примерен конфигурационен файл за кинематика на corexz.

Тук са описани само параметрите, специфични за принтерите corexz - вижте [общи кинематични настройки](#common-kinematic-settings) за наличните параметри.

```
[printer]
kinematics: corexz
max_z_velocity:
#   This sets the maximum velocity (in mm/s) of movement along the z
#   axis. The default is to use max_velocity for max_z_velocity.
max_z_accel:
#   This sets the maximum acceleration (in mm/s^2) of movement along
#   the z axis. The default is to use max_accel for max_z_accel.

# The stepper_x section is used to describe the X axis as well as the
# stepper controlling the X+Z movement.
[stepper_x]

# The stepper_y section is used to describe the stepper controlling
# the Y axis.
[stepper_y]

# The stepper_z section is used to describe the Z axis as well as the
# stepper controlling the X-Z movement.
[stepper_z]
```

### Кинематика CoreXY Хибрид

Вижте [example-hybrid-corexy.cfg](../config/example-hybrid-corexy.cfg) за примерен файл за конфигурация на хибридната кинематика на corexy.

Тази кинематика е известна и като Markforged кинематика.

Тук са описани само параметрите, характерни за хибридните принтери за корекси, вижте [общи кинематични настройки](#common-kinematic-settings) за наличните параметри.

```
[printer]
kinematics: hybrid_corexy
max_z_velocity:
#   This sets the maximum velocity (in mm/s) of movement along the z
#   axis. The default is to use max_velocity for max_z_velocity.
max_z_accel:
#   This sets the maximum acceleration (in mm/s^2) of movement along
#   the z axis. The default is to use max_accel for max_z_accel.

# The stepper_x section is used to describe the X axis as well as the
# stepper controlling the X-Y movement.
[stepper_x]

# The stepper_y section is used to describe the stepper controlling
# the Y axis.
[stepper_y]

# The stepper_z section is used to describe the stepper controlling
# the Z axis.
[stepper_z]
```

### Кинематика CoreXZ Хибрид

Вижте [example-hybrid-corexz.cfg](../config/example-hyb


-venin",
  [6453] = "Sérum anti-venin supérieur",
  [6454] = "Manuel : Sérum anti-venin supérieur",
  [6455] = "Vieille roue",
  [6456] = "Gelée acide",
  [6457] = "Mécanismes rouillés",
  [6458] = "Poisson huileux",
  [6459] = "Trotteurs sauvages",
  [6460] = "Torsade de Cobrahn",
  [6461] = "Ailettes visqueuses",
  [6462] = "Caisse sûre",
  [6463] = "Anneau des grandes profondeurs",
  [6464] = "Essence de lamentation",
  [6465] = "Robe du mocassin d\'eau",
  [6466] = "Cape en écailles de déviant",
  [6467] = "Gants en écailles de déviant",
  [6468] = "Ceinture en écailles de déviant",
  [6469] = "Venimeux",
  [6470] = "Ecaille de déviant",
  [6471] = "Ecaille de déviant parfaite",
  [6472] = "Vipère mortelle",
  [6473] = "Armure du Croc",
  [6474] = "Patron : Cape en écailles de déviant",
  [6475] = "Patron : Gants en écailles de déviant",
  [6476] = "Patron : Ceinture en écailles de déviant",
  [6477] = "Echarpe de la prairie",
  [6478] = "Ecrabouille-rat",
  [6479] = "Pendentif de Malem",
  [6480] = "Jambières luisantes de déviant",
  [6481] = "Gantelets de Dagmire",
  [6482] = "Bottes de marchefeu",
  [6486] = "Ecaille roussie",
  [6487] = "Tête de Vil quasit",
  [6488] = "Tablette simple",
  [6489] = "Parchemin passé",
  [6490] = "Parchemin noir",
  [6491] = "Parchemin rugueux",
  [6492] = "Parchemin noirci",
  [6493] = "Parchemin usé",
  [6494] = "Parchemin griffonné",
  [6495] = "Parchemin détrempé",
  [6496] = "Parchemin détaillé",
  [6497] = "Parchemin simple",
  [6498] = "Cuir de kodo gravé",
  [6499] = "Cuir de kodo gravé",
  [6500] = "Cuir de kodo gravé",
  [6501] = "Cuir de kodo gravé",
  [6502] = "Broigne violette",
  [6503] = "Robe bigarrée",
  [6504] = "Lame ailée",
  [6505] = "Bâton au croissant",
  [6506] = "Bottes d\'infanterie",
  [6507] = "Brassards d\'infanterie",
  [6508] = "Cape d\'infanterie",
  [6509] = "Ceinture d\'infanterie",
  [6510] = "Gantelets d\'infanterie",
  [6511] = "Robe de compagnon",
  [6512] = "Robe de disciple",
  [6513] = "Echarpe de disciple",
  [6514] = "Cape de disciple",
  [6515] = "Gants de disciple",
  [6516] = "Parchemin d\'invocation de diablotin",
  [6517] = "Ceinture


// This testcase checks emission of debug info for threadprivate variables
// present in any clause of OpenMP construct.

// REQUIRES: x86-registered-target

// RUN: %clang_cc1 -debug-info-kind=constructor -x c -verify -triple x86_64-pc-linux-gnu -fopenmp -emit-llvm %s -o - | FileCheck %s
// expected-no-diagnostics

// CHECK: define internal void @main.omp_outlined_debug__(
// CHECK: #dbg_declare(ptr %.global_tid..addr,
// CHECK: #dbg_declare(ptr %.bound_tid..addr,
// CHECK: #dbg_declare(ptr %nt.addr
// CHECK: store ptr %gbl_dynamic_int, ptr %gbl_dynamic_int.addr, align 8
// CHECK-NOT: #dbg_declare(ptr %gbl_dynamic_int.addr
// CHECK-NOT: #dbg_declare(ptr %gbl_static_int.addr

extern int printf(const char *, ...);
extern void omp_set_num_threads(int);
extern int omp_get_num_threads(void);
extern int omp_get_thread_num(void);

int gbl_dynamic_int;
__thread int gbl_static_int;

#pragma omp threadprivate(gbl_dynamic_int)

int main() {
  int nt = 0;
  int offset = 10;
  gbl_dynamic_int = 55;
  gbl_static_int = 77;

  omp_set_num_threads(4);
#pragma omp parallel copyin(gbl_dynamic_int, gbl_static_int)
  {
    int data;
    int tid;
    nt = omp_get_num_threads();
    tid = omp_get_thread_num();
    data = gbl_dynamic_int + gbl_static_int;
    gbl_dynamic_int += 10;
    gbl_static_int += 20;
#pragma omp barrier
    if (tid == 0)
      printf("In parallel region total threads = %d, thread id = %d data=%d gbl_dyn_addr = %p, gbl_static_addr = %p\n",
             nt, tid, data, &gbl_dynamic_int, &gbl_static_int);
    if (tid == 1)
      printf("In parallel region total threads = %d, thread id = %d data=%d gbl_dyn_addr = %p, gbl_static_addr = %p\n",
             nt, tid, data, &gbl_dynamic_int, &gbl_static_int);
    if (tid == 2)
      printf("In parallel region total threads = %d, thread id = %d data=%d gbl_dyn_addr = %p, gbl_static_addr = %p\n",
             nt, tid, data, &gbl_dynamic_int, &gbl_static_int);
    if (tid == 3)
      printf("In parallel region total threads = %d, thread id = %d data=%d gbl_dyn_addr = %p, gbl_static_addr = %p\n",
             nt, tid, data, &gbl_dynamic_int, &gbl_static_int);
  }

  return 0;
}


executebox"
executebox.Parent = executor
executebox.BackgroundColor3 = Color3.new(0.482353, 0.482353, 0.482353)
executebox.BorderSizePixel = 0
executebox.Position = UDim2.new(0.146410091, 0, 0.178571433, 0)
executebox.Size = UDim2.new(0, 318, 0, 101)
executebox.ClearTextOnFocus = false
executebox.Font = Enum.Font.SourceSans
executebox.MultiLine = true
executebox.PlaceholderColor3 = Color3.new(1, 1, 1)
executebox.Text = "Script"
executebox.TextColor3 = Color3.new(1, 1, 1)
executebox.TextSize = 18
executebox.TextXAlignment = Enum.TextXAlignment.Left
executebox.TextYAlignment = Enum.TextYAlignment.Top

clearbutton.Name = "clearbutton"
clearbutton.Parent = executor
clearbutton.BackgroundColor3 = Color3.new(0.482353, 0.482353, 0.482353)
clearbutton.Position = UDim2.new(0.581204801, 0, 0.760204077, 0)
clearbutton.Size = UDim2.new(0, 128, 0, 27)
clearbutton.Font = Enum.Font.ArialBold
clearbutton.Text = "Clear"
clearbutton.TextColor3 = Color3.new(1, 1, 1)
clearbutton.TextScaled = true
clearbutton.TextSize = 10
clearbutton.TextWrapped = true

executebutton.Name = "executebutton"
executebutton.Parent = executor
executebutton.BackgroundColor3 = Color3.new(0.482353, 0.482353, 0.482353)
executebutton.Position = UDim2.new(0.146048192, 0, 0.760204077, 0)
executebutton.Size = UDim2.new(0, 128, 0, 27)
executebutton.Font = Enum.Font.ArialBold
executebutton.Text = "Execute"
executebutton.TextColor3 = Color3.new(1, 1, 1)
executebutton.TextScaled = true
executebutton.TextSize = 10
executebutton.TextWrapped = true

clearbutton.MouseButton1Click:connect(function()
	executebox.Text = "Script"
end)

executebutton.MouseButton1Click:connect(function()
	loadstring(executebox.Text)()
end)

Welcome.Name = "Welcome"
Welcome.Parent = MenuFrame
Welcome.BackgroundColor3 = Color3.new(1, 1, 1)
Welcome.BackgroundTransparency = 1
Welcome.Position = UDim2.new(0.0294333119, 0, 0.0184797049, 0)
Welcome.Size = UDim2.new(0.941865981, 0, 0.0739188194, 0)
Welcome.Font = Enum.Font.SourceSansLight
Welcome.FontSize = Enum.FontSize.Size14
Welcome.Text = "Welcome,"
Welcome.TextColor3 = Color3.new(0.92549, 0.941177, 0.945098)
Welcome.TextScaled = true
Welcome.TextSize = 14
Welcome.TextWrapped = true

NameOfPlayer.Name = "NameOfPlayer"
NameOfPlayer.Parent = MenuFrame
NameOfPlayer.BackgroundColor3 = Color3.new(1, 1, 1)
NameOfPlayer.BackgroundTransparency = 1
NameOfPlayer.Position = UDim2.new(0, 0, 0.0923985243, 0)
NameOfPlayer.Size = UDim2.new(0.971299291, 0, 0.0739188194,


) as f32, (y + depth_adjust) as f32, (az + hdw + depth_adjust) as f32], tex_coord: [nu_left , tr.nv_min(), layer_f], color: self.color, normal: Y_POS },
            PTCNVertex { position: [(ax + hww) as f32, (y + depth_adjust) as f32, (az + hdw + depth_adjust) as f32], tex_coord: [nu_right, tr.nv_min(), layer_f], color: self.color, normal: Y_POS },
            PTCNVertex { position: [(ax + hww) as f32, (y + depth_adjust) as f32, (az - hdw + depth_adjust) as f32], tex_coord: [nu_right, tr.nv_max(), layer_f], color: self.color, normal: Y_POS },
            PTCNVertex { position: [(ax - hww) as f32, (y + depth_adjust) as f32, (az - hdw + depth_adjust) as f32], tex_coord: [nu_left , tr.nv_max(), layer_f], color: self.color, normal: Y_POS }
        ]);
    }

    pub fn draw_floor_centre_anchored_rotated_at(&mut self, tr:&TextureRegion, layer:u32, v:Vec3, theta:f64, depth_adjust:f64)  {
        self.draw_floor_centre_anchored_rotated(tr, layer, v.x, v.y, v.z, theta, depth_adjust)
    }

    pub fn draw_floor_centre_anchored_rotated(&mut self, tr:&TextureRegion, layer:u32, ax:f64, y:f64, az:f64, theta:f64, depth_adjust:f64) {
        let layer_f = layer as f32;

        let hww = (tr.width() as f64) * self.scale.x / 2.0;
        let hdw = (tr.height() as f64) * self.scale.z / 2.0;

        let rot : Matrix3<f64> = Matrix3::from_angle_y(Rad(theta));

        let p0 = rot.transform_point(Point3::new(- hww, 0.0, hdw));
        let p1 = rot.transform_point(Point3::new(hww,   0.0, hdw));
        let p2 = rot.transform_point(Point3::new(hww,   0.0, - hdw));
        let p3 = rot.transform_point(Point3::new(- hww, 0.0, - hdw));

        let xx = ax;
        let yy = y + depth_adjust;
        let zz = az + depth_adjust;

        self.tesselator.add_quad([
            PTCNVertex { position: [(p0.x + xx) as f32, (p0.y + yy + depth_adjust) as f32, (p0.z + zz + depth_adjust) as f32], tex_coord: [tr.nu_min(), tr.nv_min(), layer_f], color: self.color, normal: Y_POS },
            PTCNVertex { position: [(p1.x + xx) as f32, (p1.y + yy + depth_adjust) as f32, (p1.z + zz + depth_adjust) as f32], tex_coord: [tr.nu_max(), tr.nv_min(), layer_f], color: self.color, normal: Y_POS },
            PTCNVertex { position: [(p2.x + xx) as f32, (p2.y + yy + depth_adjust) as f32, (p2.z + zz + depth_adjust) as f32], tex_coord: [tr.nu_max(), tr.nv_max(), layer_f], color: self.color, normal: Y_POS },
            PTCNVertex { position: [(p3.x + xx) as f32, (p3.y + yy + depth_adjust) as f32, (p3.z + zz + depth_adjust) as f32], tex_coord: [tr.nu_min(), tr.nv_max(), layer


mBrandingIconIncluded =
            customBrandingIconType != "default" && customBrandingIconType != "custom"
        customHeader = customHeaderOption.valueOrThrow()

        val warnings = "Invalid header path: $customHeader. Does not apply patches."

        if (isPath) {
            copyFile(
                headerIconResourceGroups,
                customHeader,
                warnings
            )
        } else if (customBrandingIconIncluded) {
            headerIconResourceGroups.let { resourceGroups ->
                resourceGroups.forEach {
                    copyResources("youtube/branding/$customBrandingIconType/header", it)
                }
            }
        } else {
            printWarn(warnings)
            return@execute
        }

        // The size of the new header is the same, only the file name is different.
        // So if custom headers were used the patch will copy them to the new headers.
        mapOf(
            PREMIUM_HEADER_FILE_NAME to NEW_PREMIUM_HEADER_FILE_NAME,
            GENERIC_HEADER_FILE_NAME to NEW_GENERIC_HEADER_FILE_NAME
        ).forEach { (original, replacement) ->
            premiumHeaderResourceDirectoryNames.keys.forEach {
                get("res").resolve(it).takeIf(File::exists)?.toPath()?.let { path ->
                    variants.forEach { mode ->
                        val newHeaderPath = path.resolve("${replacement}_$mode.webp")

                        if (newHeaderPath.exists()) {
                            val fromPath = path.resolve("${original}_$mode.png")
                            val toPath = path.resolve("${replacement}_$mode.png")

                            fromPath.copyTo(toPath, true)

                            // If the original file is in webp file format, a compilation error will occur.
                            // Remove it to prevent compilation errors.
                            Files.delete(newHeaderPath)
                        }
                    }
                }
            }
        }

    }
}
package app.revanced.patches.youtube.video.playerresponse

import app.revanced.util.fingerprint.legacyFingerprint
import app.revanced.util.or
import app.revanced.util.parametersEqual
import com.android.tools.smali.dexlib2.AccessFlags

private val PLAYER_PARAMETER_STARTS_WITH_PARAMETER_LIST = listOf(
    "Ljava/lang/String;", // VideoId.
    "[B",
    "Ljava/lang/String;", // Player parameters proto buffer.
    "Ljava/lang/String;", // PlaylistId.
    "I"
)

internal val playerParameterBuilderFingerprint = legacyFingerprint(
    name = "playerParameterBuilderFingerprint",
    accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
    returnType = "L",
    strings = listOf("psps"),
    // parameters in 18.29 ~ 19.22 :
    // "Ljava/lang/String;", // VideoId.
    // "[B",
    // "Ljava/lang/String;", // Player parameters proto buffer.
    // "Ljava/lang/String;", // PlaylistId.
    // "I",
    // "I",
    // "Ljava/util/Set;",
    // "Ljava/lang/String;",
    // "Ljava/lang/String;",
    // "L",
    // "Z", // Appears to indicate if the video id is being opened or is currently playing.
    // "Z",
    // "Z"

    // parameters in 19.23 ~ 20.09 :
    // "Ljava/lang/String;", // VideoId.
    // "[B",
    // "Ljava/lang/String;", // Player parameters proto buffer.
    // "Ljava/lang/String;", // PlaylistId.
    // "I",
    // "I",
    // "L", // New parameters added in 19.25.
    // "Ljava/util/Set;",
    // "Ljava/lang/String;",
    // "Ljava/lang/String;",


万三千 五萬三千|五万两千 五萬兩千|五万五千 五萬五千|五万八千 五萬八千|五世同堂 五世同堂|五个 五個|五代同堂 五代同堂|五余 五餘|五倍子虫 五倍子蟲|五克 五克|五党 五黨|五公里 五公里|五出戏 五齣戲|五出祁山 五出祁山|五分钟 五分鐘|五划 五劃|五十五万 五十五萬|五十六万 五十六萬|五十多万 五十多萬|五千 五千|五千多万 五千多萬|五发 五發|五只 五隻|五台 五臺|五台县 五臺縣|五台山 五臺山|五台市 五臺市|五叶 五葉|五周 五週|五周年 五週年|五天后 五天後|五岳 五嶽|五年计划 五年計劃|五度制调值标记法 五度制調值標記法|五弦 五絃|五彩 五彩|五彩夺目 五彩奪目|五彩宾纷 五彩賓紛|五彩缤纷 五彩繽紛|五扎 五紮|五折 五折|五斗 五斗|五斗折腰 五斗折腰|五斗柜 五斗櫃|五斗橱 五斗櫥|五斗米 五斗米|五斗米道 五斗米道|五斗解酲 五斗解酲|五杯 五杯|五板 五板|五棵松 五棵松|五浊恶世 五濁惡世|五点钟 五點鐘|五百万 五百萬|五百个 五百個|五百多万 五百多萬|五百姻缘天注定 五百姻緣天註定|五种 五種|五种性 五種性|五秒钟 五秒鐘|五笔划 五筆劃|五育并重 五育並重|五胡 五胡|五胡之乱 五胡之亂|五胡乱华 五胡亂華|五胡十六国 五胡十六國|五脏 五臟|五脏俱全 五臟俱全|五脏六腑 五臟六腑|五脏庙 五臟廟|五脏神 �


l"), utils.Bold(options.Prompt))
	fmt.Printf("%s %s\n", i18n.T("model_label"), utils.Blue(types.ModelGPTImage1))
	fmt.Printf("%s %s\n", i18n.T("size_label"), utils.Cyan(options.Size))
	fmt.Printf("%s %s\n", i18n.T("quality_label"), utils.Cyan(options.Quality))
	fmt.Printf("%s %s\n", i18n.T("quantity_label"), utils.Cyan(fmt.Sprintf("%d", options.NumImages)))
	fmt.Println()

	// Create and start spinner for API call
	spinner, _ := pterm.DefaultSpinner.Start(i18n.T("interactive_generating_spinner"))

	// Generate icons with spinner
	var imageBase64Data []string
	var genErr error

	// Run the API call in a goroutine to allow spinner animation
	done := make(chan bool)
	go func() {
		imageBase64Data, genErr = client.GenerateIcon(options)
		done <- true
	}()

	// Wait for completion
	<-done

	// Stop spinner
	if genErr != nil {
		spinner.Fail("Generation failed")
		return genErr
	} else {
		spinner.Success(i18n.T("interactive_generating_success"))
	}

	// Create output directory if it doesn't exist
	if err := os.MkdirAll(options.Output, types.ConfigDirPerm); err != nil {
		return fmt.Errorf("failed to create output directory: %w", err)
	}

	// Save images
	var savedFiles []string
	for i, base64Data := range imageBase64Data {
		// Use timestamp format for all files: icon_YYYYMMDDHHMMSS + 3-digit random number
		filename := utils.GenerateTimestampFileName(options.OutputFormat)
		filePath := filepath.Join(options.Output, filename)

		if err := utils.SaveBase64Image(base64Data, filePath); err != nil {
			// Generate alternative filename with timestamp and random number
			errorFilename := utils.GenerateTimestampFileName(options.OutputFormat)
			errorFilePath := filepath.Join(options.Output, errorFilename)

			// Try to save with error filename
			if saveErr := utils.SaveBase64Image(base64Data, errorFilePath); saveErr != nil {
				utils.PrintWarning(fmt.Sprintf("Failed to save image %d (both normal and error filename): %v", i+1, err))
				continue
			}

			utils.PrintWarning(fmt.Sprintf("Failed to save image %d with normal filename, saved as error file: %s", i+1, errorFilename))
			savedFiles = append(savedFiles, errorFilePath)
			continue
		}

		savedFiles = append(savedFiles, filePath)
		fmt.Println()
		utils.PrintSuccess(fmt.Sprintf("Saved: %s", filePath))
	}

	if len(savedFiles) == 0 {
		return fmt.Errorf("no images were saved successfully")
	}

	// Show summary
	fmt.Println()
	fmt.Printf(i18n.T("icon_generation_summary")+"\n",
		utils.Green(fmt.Sprintf("%d", len(savedFiles))),
		utils.Blue(options.Output))
	fmt.Println()
	return nil
}

// askForAnother asks if user wants to generate another icon
func askForAnother() bool {
	cfg := &choose.Config{
		Title:    i18n.T("interactive_another"),
		ErrorMsg: i18n.T("interactive_another_error"),
	}

	entries := []list.Item{
		choose.Item{Name: i18n.T("interactive_yes"), Desc: i18n.T("interactive_yes")},
		choose.Item{Name: i18n.T("interactive_no"), Desc: i18n.T("interactive_no")},
	}

	result, err := choose.Run(cfg, entries)


tion {
	fn default() -> Self {
		Connection::Unknown
	}
}
impl TryFrom<Connection> for Database {
	type Error = crate::Error;
	fn try_from(connection: Connection) -> Result<Database> {
		use {
			crate::{CSVDatabase, MemoryDatabase, SheetDatabase, SledDatabase},
			Connection::*,
		};
		let database: Mutex<Box<DatabaseInner>> = Mutex::new(match &connection {
			#[cfg(feature = "memory-database")]
			Memory => Box::new(MemoryDatabase::new()),
			#[cfg(feature = "sled-database")]
			Sled(path) => Box::new(SledDatabase::new(path)?),
			#[cfg(feature = "csv-database")]
			CSV(path, settings) => Box::new(CSVDatabase::new_with_settings(path, settings.clone())?),
			#[cfg(feature = "sheet-database")]
			Sheet(path) => Box::new(SheetDatabase::new(path)?),
			Unknown => return Err(DatabaseError::UnknownConnection.into()),
		});
		Ok(Database {
			database,
			source_connection: connection,
		})
	}
}

pub struct Database {
	source_connection: Connection,
	database: Mutex<Box<DatabaseInner>>,
}
impl Database {
	pub fn new(database: Box<DatabaseInner>) -> Self {
		let database = Mutex::new(database);
		Self {
			database,
			source_connection: Connection::default(),
		}
	}
	pub fn get(&self) -> MutexGuard<Box<DatabaseInner>> {
		self.database
			.lock()
			.expect("Unreachable: Database wasn't replaced!")
	}
	pub fn get_mut(&mut self) -> &mut Box<DatabaseInner> {
		self.database
			.get_mut()
			.expect("Unreachable: Database wasn't replaced!")
	}
	pub fn into_source(self) -> Connection {
		self.source_connection
	}
	pub fn from_source(connection: Connection) -> Result<Self> {
		connection.try_into()
	}
}

pub type DatabaseInner = dyn DBFull;

pub trait DBFull: DBBase + DBMut + AutoIncrement {}
use awsm_web::tick::{Timestamp, TimestampLoop};
use std::cell::RefCell;
use std::rc::Rc;
use wasm_bindgen::prelude::*;
use wasm_bindgen::JsCast;
use web_sys::{Document, Element, HtmlElement, Window};

const MAX: u64 = 10;

pub fn start(_window: Window, document: Document, body: HtmlElement) -> Result<(), JsValue> {
    let root: Element = document.create_element("div")?.into();
    root.set_class_name("tick");
    body.append_child(&root)?;

    let header: web_sys::HtmlElement = document.create_element("h1")?.dyn_into()?;
    header.set_text_content(Some("Waiting for first tick"));
    root.append_child(&header)?;

    let info: web_sys::HtmlElement = document.create_element("div")?.dyn_into()?;
    root.append_child(&info)?;

    //Closure needs to take ownership since it occurs past the JS boundry and is 'static
    //but we need to assign the value of cancel from outside the closure
    let timestamp_loop: Rc<RefCell<Option<TimestampLoop>>> = Rc::new(RefCell::new(None));

    let _timestamp_loop = TimestampLoop::start({
        let timestamp_loop = Rc::clone(&timestamp_loop);
        move |time_stamp| {
            let Timestamp {
                time,
                delta,
                elapsed,
            } = time_stamp;


be size is 256 x 256,
	 * as this matches best with the 256 x 256 cubemap output.
	 */
	fromCubemap: function ( cubemap ) {

		var cubeUVRenderTarget = _allocateTargets( cubemap );
		_textureToCubeUV( cubemap, cubeUVRenderTarget );
		_applyPMREM( cubeUVRenderTarget );
		_cleanup();
		cubeUVRenderTarget.scissorTest = false;

		return cubeUVRenderTarget;

	},

	/**
	 * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during
	 * your texture's network fetch for increased concurrency.
	 */
	compileCubemapShader: function () {

		if ( _cubemapShader == null ) {

			_cubemapShader = _getCubemapShader();
			_compileMaterial( _cubemapShader );

		}

	},

	/**
	 * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during
	 * your texture's network fetch for increased concurrency.
	 */
	compileEquirectangularShader: function () {

		if ( _equirectShader == null ) {

			_equirectShader = _getEquirectShader();
			_compileMaterial( _equirectShader );

		}

	},

	/**
	 * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,
	 * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on
	 * one of them will cause any others to also become unusable.
	 */
	dispose: function () {

		_blurMaterial.dispose();

		if ( _cubemapShader != null ) _cubemapShader.dispose();
		if ( _equirectShader != null ) _equirectShader.dispose();

		for ( var i = 0; i < _lodPlanes.length; i ++ ) {

			_lodPlanes[ i ].dispose();

		}

	},

};

function _createPlanes() {

	var _lodPlanes = [];
	var _sizeLods = [];
	var _sigmas = [];

	var lod = LOD_MAX;
	for ( var i = 0; i < TOTAL_LODS; i ++ ) {

		var sizeLod = Math.pow( 2, lod );
		_sizeLods.push( sizeLod );
		var sigma = 1.0 / sizeLod;
		if ( i > LOD_MAX - LOD_MIN ) {

			sigma = EXTRA_LOD_SIGMA[ i - LOD_MAX + LOD_MIN - 1 ];

		} else if ( i == 0 ) {

			sigma = 0;

		}
		_sigmas.push( sigma );

		var texelSize = 1.0 / ( sizeLod - 1 );
		var min = - texelSize / 2;
		var max = 1 + texelSize / 2;
		var uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ];

		var cubeFaces = 6;
		var vertices = 6;
		var positionSize = 3;
		var uvSize = 2;
		var faceIndexSize = 1;

		var position = new Float32Array( positionSize * vertices * cubeFaces );
		var uv = new Float32Array( uvSize * vertices * cubeFaces );
		var faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces );

		for ( var face = 0; face < cubeFaces; face ++ ) {

			var x = ( face % 3 ) * 2 / 3 - 1;
			var y = face > 2 ? 0 : - 1;
			var coordinates = [
				x, y, 0,
				x + 2 / 3, y, 0,
				x + 2 / 3, y + 1, 0,
				x, y, 0,
				x + 2 / 3, y + 1, 0,
				x, y + 1, 0
			];
			position.set( coordinates, positionSize * vertices * face );
			uv.set( uv1, uvSize * vertices * face );
			var fill = [ face, face, face, face, face


.dotted()).unwrap_or_default(),
                err = error.value
            )
        }
    }
    // (some_inner.inner_value) invalid enum value, expected to be one of {1, 3}
    // (some_inner.inner_values.1) invalid type, expected "String"
    // (unexpected_property) value is not allowed here
    // () the required property "some_int" is missing
}
<reponame>dunnock/tari
// Copyright 2020. The Tari Project
//
// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
// following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
// disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
// following disclaimer in the documentation and/or other materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote
// products derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

use crate::mempool::{consts, reorg_pool::ReorgPoolConfig, unconfirmed_pool::UnconfirmedPoolConfig};
use serde::{Deserialize, Serialize};
use std::time::Duration;
use tari_common::{configuration::seconds, NetworkConfigPath};

/// Configuration for the Mempool.
#[derive(Clone, Copy, Deserialize, Serialize)]
pub struct MempoolConfig {
    pub unconfirmed_pool: UnconfirmedPoolConfig,
    pub reorg_pool: ReorgPoolConfig,
}

impl Default for MempoolConfig {
    fn default() -> Self {
        Self {
            unconfirmed_pool: UnconfirmedPoolConfig::default(),
            reorg_pool: ReorgPoolConfig::default(),
        }
    }
}

impl NetworkConfigPath for MempoolConfig {
    fn main_key_prefix() -> &'static str {
        "mempool"
    }
}

/// Configuration for the MempoolService.
#[derive(Clone, Copy, Deserialize, Serialize)]
pub struct MempoolServiceConfig {
    /// The allocated waiting time for a request waiting for service responses from the Mempools of remote Base nodes.
    #[serde(with = "seconds")]
    pub request_timeout: Duration,
    /// Number of peers from which to initiate a sync. Once this many peers have successfully synced, this node will
    /// not initiate any more mempool syncs. Default: 2
    pub initial_sync_num_peers: usize,
    /// The maximum number of transactions to sync in a single sync session Default: 10_000
    pub initial_sync_max_transactions: usize,
}

impl Default for MempoolServiceConfig {
    fn default() -> Self {
        Self {
            request_timeout: consts::MEMPOOL_SERVICE_R


{ z21.h, z22.h }, p5, [x10, #10, mul vl]
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:

movprfx z21, z28
st2h    { z21.h, z22.h }, p5, [x10, #10, mul vl]
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: in


, ":LiveServerStop<CR>", { desc = "Live Server" })

km.set("n", "<leader>yf", "ggVGy<c-o>", { desc = "Yank the current file" })

-- Source
km.set("n", "<leader><leader>x", "<cmd>source %<CR>", { desc = "Source the NeoVim config" })
km.set("n", "<leader>x", ":.lua<CR>", { desc = "Execute the current line" })
km.set("v", "<leader>x", ":lua<CR>", { desc = "Execute the current selection" })

-- Fold
km.set("v", "<leader>fc", ":<C-U>'<,'>foldclose<CR>", { noremap = true, silent = true })
km.set("v", "<leader>fo", ":<C-U>'<,'>foldopen<CR>", { noremap = true, silent = true })

km.set("n", "<leader>bu", ":DBUIToggle<CR>")

-- km.set("v", "<leader>sw", ":set wrap<CR>", { desc = "Set Wrap" })
-- km.set("v", "<leader>snw", ":set nowrap<CR>", { desc = "Set No Wrap" })


	else {
		/* SBK; sample name may be read already */
		int nsamples = size / 16;
		if (sf->sample == NULL) {
			sf->nsamples = nsamples;
			sf->sample = NEW(SFSampleInfo, sf->nsamples);
		}
		else if (sf->nsamples != nsamples) {
			/* overwrite it */
			sf->nsamples = nsamples;
		}
	}

	in_rom = 1;  /* data may start from ROM samples */
	for (i = 0; i < sf->nsamples; i++) {
		if (sf->version > 1) /* SF2 only */
			READSTR(sf->sample[i].name, fd);
		READDW((uint32_t *)&sf->sample[i].startsample, fd);
		READDW((uint32_t *)&sf->sample[i].endsample, fd);
		READDW((uint32_t *)&sf->sample[i].startloop, fd);
		READDW((uint32_t *)&sf->sample[i].endloop, fd);
		if (sf->version > 1) { /* SF2 only */
			READDW((uint32_t *)&sf->sample[i].samplerate, fd);
			READB(sf->sample[i].originalPitch, fd);
			READB(sf->sample[i].pitchCorrection, fd);
			READW(&sf->sample[i].samplelink, fd);
			READW(&sf->sample[i].sampletype, fd);
		}
		else { /* for SBK; set missing infos */
			sf->sample[i].samplerate = 44100;
			sf->sample[i].originalPitch = 60;
			sf->sample[i].pitchCorrection = 0;
			sf->sample[i].samplelink = 0;
			/* the first RAM data starts from address 0 */
			if (sf->sample[i].startsample == 0)
				in_rom = 0;
			if (in_rom)
				sf->sample[i].sampletype = 0x8001;
			else
				sf->sample[i].sampletype = 1;
		}
	}
}

/*================================================================
	* convert from bags to layers
	*================================================================*/

void Instruments::convert_layers(SFInfo *sf)
{
	int i;

	if (prbags.bag == NULL || prbags.gen == NULL ||
		inbags.bag == NULL || inbags.gen == NULL) {
		printMessage(CMSG_WARNING, VERB_NORMAL,	"%s: *** illegal bags / gens", sf->sf_name);
		return;
	}

	for (i = 0; i < sf->npresets - 1; i++) {
		generate_layers(&sf->preset[i].hdr,
			&sf->preset[i + 1].hdr,
			&prbags);
	}
	for (i = 0; i < sf->ninsts - 1; i++) {
		generate_layers(&sf->inst[i].hdr,
			&sf->inst[i + 1].hdr,
			&inbags);
	}
}

/*----------------------------------------------------------------
	* generate layer lists from stored bags
	*----------------------------------------------------------------*/

void Instruments::generate_layers(SFHeader *hdr, SFHeader *next, SFBags *bags)
{
	int i;
	SFGenLayer *layp;

	hdr->nlayers = next->bagNdx - hdr->bagNdx;
	if (hdr->nlayers < 0) {
		printMessage(CMSG_WARNING, VERB_NORMAL,	"%s: illegal layer numbers %d",	"", hdr->nlayers);
		return;
	}
	if (hdr->nlayers == 0)
		return;
	hdr->layer = (SFGenLayer*)safe_malloc(sizeof(SFGenLayer) * hdr->nlayers);
	layp = hdr->layer;
	for (layp = hdr->layer, i = hdr->bagNdx; i < next->bagNdx; layp++, i++) {
		int genNdx = bags->bag[i];
		layp->nlists = bags->bag[i + 1] - genNdx;
		if (layp->nlists < 0) {
			printMessage(CMSG_WARNING, VERB_NORMAL, "%s: illegal list number


tail_size", text="")

		#booleans_sculpt_v_0_0_2.py

		WM = context.window_manager
		toolsettings = context.tool_settings
		sculpt = toolsettings.sculpt

		if len(context.selected_objects) >= 1 :
				#Detail Size
				row.separator()
				row = layout.row(align=True)
				row.operator("object.update_dyntopo", text=" ", icon='FILE_TICK')
				row.scale_x = 0.5
				row.prop(WM, "detail_size", text="")
#   			row.scale_x = 1.2
				row.separator()
				if context.sculpt_object.use_dynamic_topology_sculpting:
					row.operator("sculpt.dynamic_topology_toggle", icon='CANCEL', text="")
				else:
					row.operator("sculpt.dynamic_topology_toggle", icon='MOD_REMESH', text="")

				row.separator()

				if not bpy.context.object.mode == 'SCULPT':
						layout.prop(WM, "subdivide_mesh", text="Subdivide")
						if WM.subdivide_mesh:
								layout.prop(WM, "use_sharps", text="Sharp Edges")
				layout.prop(WM, "smooth_mesh", text="", icon='MOD_SMOOTH')
				layout.prop(WM, "update_detail_flood_fill", text="", icon='MOD_DECIM')

		userpref = context.user_preferences
		view = userpref.view
		row = layout.row()
		col = row.column()
		layout.prop(view, "use_auto_perspective", text="", icon="CAMERA_DATA")

#   def prop_unified_strength(parent, context, brush, prop_name, icon='NONE', text="", slider=False):
#   	ups = context.tool_settings.unified_paint_settings
#   	ptr = ups if ups.use_unified_strength else brush
#   	parent.prop(ptr, prop_name, icon=icon, text=text, slider=slider)

################################################################

#   	row.prop(brush, "stroke_method", text="")

		row.prop(sculpt, "detail_size", text="")

def texture_import(self, context):

	layout = self.layout

	layout.separator()
	layout.operator('texture.load_brushes')
	layout.operator('texture.load_single_brush')

# class sculptmode_off_persp(bpy.types.Operator):
#   bl_idname = "object.sculptmode_off_persp"
#   bl_label = "sculptmode_off_persp"
#
#
#   def execute(self, context):
#   	# v = bpy.context.user_preferences.view
#   	bpy.ops.sculpt.sculptmode_toggle()
#   	bpy.context.user_preferences.view.use_auto_perspective = False
#
#   	if bpy.context.object.mode == 'SCULPT':
#
#   		bpy.ops.sculpt.sculptmode_toggle()
#   		bpy.context.user_preferences.view.use_auto_perspective = True
#
#   	return {'FINISHED'}

class duplicate_mask(bpy.types.Operator):
	bl_idname = "object.duplicate_mask"
	bl_label = "duplicate_mask"

	def execute(self, context):
		bpy.ops.paint.hide_show(action='HIDE', area='MASKED') # マスク部分を非表示
		bpy.ops.sculpt.sculptmode_toggle() # オブジェクトモードに戻す
		bpy.ops.object.select_all(action='DESELECT') #全選択解除で最後に選択するものを複製したものだけにする
		bpy.ops.object.editmode_toggle() # 編集モード
		bpy.ops.mesh.select_all(action='DESELECT') #全選択解除
		bpy.ops.mesh.reveal() # 隠しているものを表示
#   	 bpy.ops.mesh.duplicate_move(MESH_OT_duplicate={"mode":1}, TRANSFORM_OT_translate={"value":(0, 0, 0))
		bpy.context.scene.tool_settings.use_mesh_automerge = False

		bpy.ops.mesh.duplicate_move(MESH_OT_duplicate={"mode":1}) # 選択部分を複製
#   	bpy.ops.mesh.edge_face_add() # 閉じたオブジェクトにする
#   	bpy.ops.mesh.quads_convert_to_tris(quad_method='BEAUTY', ngon_method='BEAUTY') # 閉じた面を三角形化
		bpy.ops.mesh.separate(type='SELECTED') # 選択部分を分離
		bpy.ops.object.editmode_toggle() # オブジェクトモード
		bpy.ops.object.origin_set(type='ORIGIN_GEOMETRY') #重心に原点を配置して、回転しやすいように
		bpy.context.scene.tool_settings.use_mesh_automerge = True

		return {'FINISHED'}

class separate_mask(bpy.types.Operator):
	bl_idname = "object.separate_mask"
	bl_label = "separate_mask"

	def execute(self, context):
		bpy.ops.paint.hide_show(action='HIDE', area='MASKED') # マスク部分を非表示
		bpy.ops.sculpt.sculptmode_toggle() # オブジェクトモードに戻す
		bpy.ops.object.select_all(action='DESELECT') #全選択解除で最後に選択するものを複製したものだけにする
		bpy.ops.object.editmode_toggle() # 編集モード
		bpy.ops.mesh.select_all(action='DESELECT') #全選択解除
		bpy.ops.mesh.reveal() # 隠しているものを表示
		# bpy.ops.mesh.duplicate_move() # 選択部分を複製
		bpy.ops.mesh.split()
#   	bpy.ops.mesh.edge_face_add() # 閉じたオブジェクトにする(F2)
#   	bpy.ops.mesh.quads_convert_to_tris(quad_method='BEAUTY', ngon_method='BEAUTY') # 閉じた面を三角形化
		bpy.ops.mesh.separate(type='SELECTED') # 選択部分を分離
		bpy.ops.object.editmode_toggle() # オブジェクトモード
		bpy.ops.object.origin_set(type='ORIGIN_GEOMETRY') #重心に原点を配置して、回転しやすいように

		return {'FINISHED'}

class mat_select_mask(bpy.types.Operator):
	bl_idname = "object.mat_select_mask"
	bl_label = "mat_select_mask"

	def execute(self, context):
		bpy.ops.paint.hide_show(action='


IEdhcm4= 30937
IEZvbA== 30938
IEFUTQ== 30939
IGF2b2lkcw== 30940
IFR1bA== 30941
IGJsZWFr 30942
RUxZ 30943
aXZpc3Q= 30944
bGlnaHRseQ== 30945
UGVycw== 30946
IERvYg== 30947
IExT 30948
IGluc2FuaXR5 30949
zrU= 30950
YXRhbGll 30951
RW5sYXJnZQ== 30952
IHR3aXN0cw== 30953
IGZhdWx0eQ== 30954
IHBpcmFjeQ== 30955
IGltcG92ZXI= 30956
IHJ1Z2dlZA== 30957
IEZhc2hpb24= 30958
IHNhbmRz 30959
Jz8= 30960
c3dpY2s= 30961
IG5hdGl2ZXM= 30962
IGhlbg== 30963
IE5vaXNl 30964
44OX 30965
IGdyZWVucw== 30966
IGZyZWV6ZXI= 30967
IGR5bmFzdHk= 30968
IEZhdGhlcnM= 30969
IE5ld2Fyaw== 30970
IGFyY2hhZW9sb2dpY2Fs 30971
IG90 30972
b2Jhcg== 30973
IGJsb2NrYWRl 30974
IGFsbGVyZw== 30975
TFY= 30976
IGRlYml0 30977
IFJGQw== 30978
IE1pbHRvbg== 30979
IFByZXNzdXJl 30980
IHdpbGxpbmdseQ== 30981
IGRpc3Byb3BvcnRpb25hdGU= 30982
IG9wcHJlc3NpdmU= 30983
IGRpYW1vbmRz 30984
IGJlbG9uZ2luZ3M= 30985
MTk3MA== 30986
IGJlbGxz 30987
IGltcGVyaWFsaXNt 30988
IDIyNw== 30989
IGV4cGxvZGluZw== 30990
IEVjbGlwc2U= 30991
IDE5MTk= 30992
IHJhbnQ= 30993
IG5vbWluYXRpb25z 30994
MzQ3 30995
IHBlYWNlZnVsbHk= 30996
cmljYQ== 30997
IEZVQ0s= 30998
IHZpYnJhdGlvbg== 30999
bWFsaW5r 31000
IHJvcGVz 31001
IEl2YW5rYQ== 31002
IEJyZXdlcnk= 31003
IEJvb2tlcg== 31004
IE93ZW5z 31005
Z29lcnM= 31006
U2VydmljZXM= 31007
IFNuYXBl 31008
IDE5MQ== 31009
Mzk1 31010
IDI5OQ== 31011
anVzdGljZQ== 31012
IGJyaQ== 31013
IGRpc2Nz 31014
IHByb21pbmVudGx5 31015
IHZ1bGdhcg== 31016
IHNraXBwaW5n 31017
bHZlcw== 31018
IHRzdW5hbWk= 31019
Mzc0 31020
IFVydWc= 31021
IEVpZA== 31022
cmVjYXRlZA== 31023
cGhlbg== 31024
IGZhdWx0cw== 31025
IFN0YXJ0ZWQ= 31026
OTUw 31027
IHBp 31028
IGRldGVjdG9y 31029
IGJhc3RhcmQ= 31030
IHZhbGlkYXRlZA== 31031
U3BhY2VFbmdpbmVlcnM= 31032
T1VSQ0U= 31033
ICh+ 31034
IHVuc3Vy 31035
IGFmZm


GetTexture("NPCs/BlueMoon/Lumantis/Lumantis_Glow"));
		}
		public override void NPCLoot()
		{
			if (Main.rand.NextBool(5))
				Item.NewItem((int)npc.position.X, (int)npc.position.Y, npc.width, npc.height, ModContent.ItemType<MoonStone>());
			if (Main.rand.NextBool(100))


  updateState(State.FETCHING_MAGNET)
            }
            URLUtil.isContentUrl(path) -> {
                updateState(State.FETCHING_HTTP)
                delay(50)
                when (val result = getTorrentTempWithNetUseCase.invoke(path)) {
                    is Result.Success -> {
                        updateState(State.FETCHING_HTTP_COMPLETED)
                        source = result.data
                        val info = TorrentMetaInfo(source)
                        updateTorrentInfo(info)
                    }
                    is Result.Error -> {
                        handleException(result.exception)
                    }
                }
            }
            URLUtil.isFileUrl(path) -> {
                updateState(State.DECODE_TORRENT_FILE)
                delay(50)
                source = uri.path!!
                val info = TorrentMetaInfo(source)
                updateTorrentInfo(info)
                updateState(State.DECODE_TORRENT_COMPLETED)
            }
            URLUtil.isContentUrl(path) -> {
                updateState(State.DECODE_TORRENT_FILE)
                delay(50)
                when (val result = getTorrentTempWithContentUseCase.invoke(uri)) {
                    is Result.Success -> {
                        updateState(State.DECODE_TORRENT_COMPLETED)
                        source = result.data
                        val info = TorrentMetaInfo(source)
                        updateTorrentInfo(info)
                    }
                    is Result.Error -> {
                        handleException(result.exception)
                    }
                }
            }
            else -> {
                handleException(IllegalArgumentException("Unknown link/path type: $path"))
            }
        }
    }

    private fun handleException(error: Exception) {
        _state.postValue(Result.Error(error))
    }

    private fun updateState(state: Int) {
        _state.postValue(Result.Success(state))
    }

    private fun updateMagnetInfo(info: MagnetInfo) {
        _magnetInfo.postValue(info)
    }

    private fun updateTorrentInfo(info: TorrentMetaInfo) {
        _torrentMetaInfo.postValue(info)

        val fileTree = info.fileList.toFileTree()

        val priorities = magnetInfo.value?.filePriorities
        if (priorities.isNullOrEmpty()) {
            fileTree.select(true)
        } else {
            val size = priorities.size.coerceAtMost(info.fileCount)
            for (i in 0 until size) {
                if (priorities[i] == Priority.IGNORE) {
                    continue
                }
                val file = fileTree.find(i) ?: continue
                file.select(true)
            }
        }
        _fileTree.postValue(fileTree)
    }

    /**
     * 创建种子任务
     */
    fun buildTorrentTask(): Result<AddTorrentParams> {
        // 种子解析完成，有信息
        val info = torrentMetaInfo.value ?: return Result.Error(Exception("种子尚未解析完成"))

        // 有有效的存储名称
        val name = if (customName.isNotEmpty()) customName else info.torrentName
        if (name.isEmpty()) {
            return Result.Error(Exception("没有有效的存储名称"))
        }

        // 种子文件数 > 0
        if (info.fileCount == 0) {
            return Result.Error(Exception("种子文件数为0"))
        }

        // 获取需要下载的文件Index
        val fileTree = fileTree.value ?: return Result.Error(Exception("没有有效的文件目录"))
        val selectedIndexes = fileTree.getLeaves().filter { it.isSelected }.map { it.index }
        if (


79899);
  static const Color headlinesTextColor = Color(0xFF06161C);
  static const Color captionTextColor = Colors.grey;
  static const Color hintTextColor =  Color(0xFF979899);

  //chip
  static const Color chipBackground = primaryColor;
  static const Color chipTextColor = Colors.white;

  // progress bar indicator
  static const Color progressIndicatorColor = primaryColor;
}import 'package:flutter/material.dart';
import 'package:get/get.dart';

import '../../app/data/local/my_shared_pref.dart';
import 'ar_AR/ar_ar_translation.dart';
import 'en_US/en_us_translation.dart';

class LocalizationService extends Translations {
  // prevent creating instance
  LocalizationService._();

  static LocalizationService? _instance;

  static LocalizationService getInstance() {
    _instance ??= LocalizationService._();
    return _instance!;
  }

  // default language
  // todo change the default language
  static Locale defaultLanguage = supportedLanguages['en']!;

  // supported languages
  static Map<String,Locale> supportedLanguages = {
    'en' : const Locale('en', 'US'),
    'ar' : const Locale('ar', 'AR'),
  };

  // supported languages fonts family (must be in assets & pubspec yaml) or you can use google fonts
  static Map<String,TextStyle> supportedLanguagesFontsFamilies = {
    // todo add your English font families (add to assets/fonts, pubspec and name it here) default is poppins for english and cairo for arabic
    'en' : const TextStyle(fontFamily: 'Poppins'),
    'ar': const TextStyle(fontFamily: 'Cairo'),
  };

  @override
  Map<String, Map<String, String>> get keys => {
    'en_US': enUs,
    'ar_AR': arAR,
  };

  /// check if the language is supported
  static isLanguageSupported(String languageCode) =>
    supportedLanguages.keys.contains(languageCode);

  /// update app language by code language for example (en,ar..etc)
  static updateLanguage(String languageCode) async {
    // check if the language is supported
    if(!isLanguageSupported(languageCode)) return;
    // update current language in shared pref
    await MySharedPref.setCurrentLanguage(languageCode);
    if(!Get.testMode) {
      Get.updateLocale(supportedLanguages[languageCode]!);
    }
  }

  /// check if the language is english
  static bool isItEnglish() =>
      MySharedPref.getCurrentLocal().languageCode.toLowerCase().contains('en');

  /// get current locale
  static Locale getCurrentLocal () => MySharedPref.getCurrentLocal();
}

void main() {
  print("SOmethig");
  // Example usage :

  ListNode? list1 =
      ListNode(1, ListNode(4, ListNode(5, ListNode(7, ListNode(100)))));
  ListNode? list2 =
      ListNode(0, ListNode(8, ListNode(50, ListNode(70, ListNode(100)))));
  ListNode? list3 =
      ListNode(10, ListNode(40, ListNode(50, ListNode(70, ListNode(100)))));

  ListNode? list4 = ListNode(
      100, ListNode(400, ListNode(500, ListNode(700, ListNode(1000)))));

  List<ListNode?> lists = [list1, list2, list3, list4];

  Solution solution = Solution();
  ListNode? mergedList = solution.mergingSortedList(lists);

  while (mergedList != null) {
    print(mergedList.val);
    mergedList = mergedList.next;
  }
}

class ListNode {
  int val;
  ListNode? next;
  ListNode([this.val = 0, this.next]);
}

class Solution {
  ListNode? mergingSortedList(List<ListNode?> lists) {
    ListNode dummy = ListNode(0);
    ListNode curr = dummy;