> SmallRectangularGrid {
        small_rect_grid(units::RowLength(w), units::ColumnLength(h))
            .expect("grid dimensions too large for small grid")
    }

    /// Distances between cells in a rectangular grid
    type SmallDistances = Distances<SquareCell, u8>;
    fn small_distances(
        g: &SmallRectangularGrid,
        coord: <SquareCell as Cell>::Coord,
    ) -> Option<SmallDistances> {
        SmallDistances::for_grid(g, coord)
    }

    static OUT_OF_GRID_COORDINATE: Cartesian2DCoordinate = Cartesian2DCoordinate {
        x: u32::MAX,
        y: u32::MAX,
    };

    #[test]
    fn distances_construction_requires_valid_start_coordinate() {
        let g = small_grid(3, 3);
        let distances = small_distances(&g, OUT_OF_GRID_COORDINATE);
        assert!(distances.is_none());
    }

    #[test]
    fn start() {
        let g = small_grid(3, 3);
        let start_coordinate = Cartesian2DCoordinate::new(1, 1);
        let distances = small_distances(&g, start_coordinate).unwrap();
        assert_eq!(start_coordinate, distances.start());
    }

    #[test]
    fn distances_to_unreachable_cells_is_none() {
        let g = small_grid(3, 3);
        let start_coordinate = Cartesian2DCoordinate::new(0, 0);
        let distances = small_distances(&g, start_coordinate).unwrap();
        for coord in g.iter() {
            let d = distances.distance_from_start_to(coord);

            if coord != start_coordinate {
                assert!(d.is_none());
            } else {
                assert!(d.is_some());
                assert_eq!(d.unwrap(), 0);
            }
        }
    }

    #[test]
    fn distance_to_invalid_coordinate_is_none() {
        let g = small_grid(3, 3);
        let start_coordinate = Cartesian2DCoordinate::new(0, 0);
        let distances = small_distances(&g, start_coordinate).unwrap();
        assert_eq!(
            distances.distance_from_start_to(OUT_OF_GRID_COORDINATE),
            None
        );
    }

    #[test]
    fn distances_on_open_grid() {
        let mut g = small_grid(2, 2);
        let gc = |x, y| Cartesian2DCoordinate::new(x, y);
        let top_left = gc(0, 0);
        let top_right = gc(1, 0);
        let bottom_left = gc(0, 1);
        let bottom_right = gc(1, 1);
        g.link(top_left, top_right).expect("Link Failed");
        g.link(top_left, bottom_left).expect("Link Failed");
        g.link(top_right, bottom_right).expect("Link Failed");
        g.link(bottom_left, bottom_right).expect("Link Failed");

        let start_coordinate = gc(0, 0);
        let distances = small_distances(&g, start_coordinate).unwrap();

        assert_eq!(distances.distance_from_start_to(top_left), Some(0));
        assert_eq!(distances.distance_from_start_to(top_right), Some(1));
        assert_eq!(distances.distance_from_start_to(bottom_left), Some(1));
        assert_eq!(distances.distance_from_start_to(bottom_right), Some(2));
    }

    #[test]
    fn max_distance() {
        let mut g = small_grid(2, 2);
        let gc = |x, y| Cartesian2DCoordinate::new(x, y);
        let top_left = gc(0, 0);
        let top_right = gc(1, 0);
        let bottom_left = gc(0, 1);
        let bottom_right = gc(1, 1);
        g.link(top_left, top_right).expect("Link Failed");
        g.link(top_left, bottom_left).expect("Link


Scenarios|Scenariu|Scenariusz|Scenaro|Schema dello scenario|Se ðe|Se the|Se þe|Senario|Senaryo|Senaryo deskripsyon|Senaryo Deskripsyon|Senaryo taslağı|Shiver me timbers|Situācija|Situai|Situasie|Situasie Uiteensetting|Skenario|Skenario konsep|Skica|Structura scenariu|Structură scenariu|Struktura scenarija|Stsenaarium|Swa|Swa hwaer swa|Swa hwær swa|Szablon scenariusza|Szenario|Szenariogrundriss|Tapaukset|Tapaus|Tapausaihio|Taust|Tausta|Template Keadaan|Template Senario|Template Situai|The thing of it is|Tình huống|Variantai|Voorbeelde|Voorbeelden|Wharrimean is|Yo\-ho\-ho|You'll wanna|Założenia|Παραδείγματα|Περιγραφή Σεναρίου|Σενάρια|Σενάριο|Υπόβαθρο|Кереш|Контекст|Концепт|Мисаллар|Мисоллар|Основа|Передумова|Позадина|Предистория|Предыстория|Приклади|Пример|Примери|Примеры|Рамка на сценарий|Скица|Структура сценарија|Структура сценария|Структура сценарію|Сценарий|Сценарий структураси|Сценарийның төзелеше|Сценарији|Сценарио|Сценарій|Тарих|Үрнәкләр|דוגמאות|רקע|תבנית תרחיש|תרחיש|الخلفية|الگوی سناریو|امثلة|پس منظر|زمینه|سناریو|سيناريو|سيناريو مخطط|مثالیں|منظر نامے کا خاکہ|منظرنامہ|نمونه ها|उदाहरण|परिदृश्य|परिदृश्य रूपरेखा|पृष्ठभूमि|ਉਦਾਹਰਨਾਂ|ਪਟਕਥਾ|ਪਟਕਥਾ ਢਾਂਚਾ|ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ|ਪਿਛੋਕੜ|ఉదాహరణలు|కథనం|నేపథ్యం|సన్నివేశం|ಉದಾಹರಣೆಗಳು|ಕಥಾಸಾರಾಂಶ|ವಿವರಣೆ|ಹಿನ್ನೆಲೆ|โครงสร้างของเหตุการณ์|ชุดของตัวอย่าง|ชุดของเหตุการณ์|แนวคิด|สรุปเหตุการณ์|เหตุการณ์|배경|시나리오|시나리오 개요|예|サンプル|シナリオ|シナリオアウトライン|シナリオテンプレ|シナリオテンプレート|テンプレ|例|例子|剧本|剧本大纲|劇本|劇本大綱|场景|场景大纲|場景|場景大綱|背景):[^:\r\n]*/,lookbehind:!0,inside:{important:{pattern:/(:)[^\r\n]*/,lookbehind:!0},keyword:/[^:\r\n]+


x05]

ds_or_rtn_b32 v5, v1, v255 offset:65535
// CHECK: [0xff,0xff,0x54,0xd8,0x01,0xff,0x00,0x05]

ds_or_rtn_b32 v5, v1, v2
// CHECK: [0x00,0x00,0x54,0xd8,0x01,0x02,0x00,0x05]

ds_or_rtn_b32 v5, v1, v2 offset:0
// CHECK: [0x00,0x00,0x54,0xd8,0x01,0x02,0x00,0x05]

ds_or_rtn_b32 v5, v1, v2 offset:4
// CHECK: [0x04,0x00,0x54,0xd8,0x01,0x02,0x00,0x05]

ds_or_rtn_b32 v5, v1, v2 offset:65535 gds
// CHECK: [0xff,0xff,0x55,0xd8,0x01,0x02,0x00,0x05]

ds_xor_rtn_b32 v5, v1, v2 offset:65535
// CHECK: [0xff,0xff,0x56,0xd8,0x01,0x02,0x00,0x05]

ds_xor_rtn_b32 v255, v1, v2 offset:65535
// CHECK: [0xff,0xff,0x56,0xd8,0x01,0x02,0x00,0xff]

ds_xor_rtn_b32 v5, v255, v2 offset:65535
// CHECK: [0xff,0xff,0x56,0xd8,0xff,0x02,0x00,0x05]

ds_xor_rtn_b32 v5, v1, v255 offset:65535
// CHECK: [0xff,0xff,0x56,0xd8,0x01,0xff,0x00,0x05]

ds_xor_rtn_b32 v5, v1, v2
// CHECK: [0x00,0x00,0x56,0xd8,0x01,0x02,0x00,0x05]

ds_xor_rtn_b32 v5, v1, v2 offset:0
// CHECK: [0x00,0x00,0x56,0xd8,0x01,0x02,0x00,0x05]

ds_xor_rtn_b32 v5, v1, v2 offset:4
// CHECK: [0x04,0x00,0x56,0xd8,0x01,0x02,0x00,0x05]

ds_xor_rtn_b32 v5, v1, v2 offset:65535 gds
// CHECK: [0xff,0xff,0x57,0xd8,0x01,0x02,0x00,0x05]

ds_mskor_rtn_b32 v5, v1, v2, v3 offset:65535
// CHECK: [0xff,0xff,0x58,0xd8,0x01,0x02,0x03,0x05]

ds_mskor_rtn_b32 v255, v1, v2, v3 offset:65535
// CHECK: [0xff,0xff,0x58,0xd8,0x01,0x02,0x03,0xff]

ds_mskor_rtn_b32 v5, v255, v2, v3 offset:65535
// CHECK: [0xff,0xff,0x58,0xd8,0xff,0x02,0x03,0x05]

ds_mskor_rtn_b32 v5, v1, v255, v3 offset:65535
// CHECK: [0xff,0xff,0x58,0xd8,0x01,0xff,0x03,


ToCommand($"Group name must start with #.");
            return;
        }

        var groupName = command.GetArg(1);

        RemoveGroup(caller, groupName, command);
    }

    /// <summary>
    /// Removes a group.
    /// </summary>
    /// <param name="caller">The player issuing the command.</param>
    /// <param name="name">The group name to remove.</param>
    /// <param name="command">Optional command info for confirmation.</param>
    private void RemoveGroup(CCSPlayerController? caller, string name, CommandInfo? command = null)
    {
        if (DatabaseProvider == null) return;
        _ = PermissionManager.DeleteGroup(name);

        AddTimer(2, () =>
        {
            ReloadAdmins(caller);
        }, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);

        Helper.LogCommand(caller, $"css_delgroup {name}");

        var msg = $"Removed group '{name}'";
        if (command != null)
            command.ReplyToCommand(msg);
        else if (caller != null && caller.IsValid)
            caller.PrintToChat(msg);
        else
            Server.PrintToConsole(msg);
    }

    /// <summary>
    /// Reloads admin and group data from database and json files.
    /// </summary>
    /// <param name="caller">The player issuing the reload command.</param>
    /// <param name="command">Command input parameters.</param>
    [CommandHelper(whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
    [RequiresPermissions("@css/root")]
    public void OnRelAdminCommand(CCSPlayerController? caller, CommandInfo command)
    {
        if (DatabaseProvider == null) return;
        ReloadAdmins(caller);
        command.ReplyToCommand("Reloaded sql admins and groups");
    }

    /// <summary>
    /// Reloads bans cache.
    /// </summary>
    /// <param name="caller">The player issuing the reload command.</param>
    /// <param name="command">Command input parameters.</param>
    [CommandHelper(whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
    [RequiresPermissions("@css/root")]
    public void OnRelBans(CCSPlayerController? caller, CommandInfo command)
    {
        if (DatabaseProvider == null) return;

        _ = Instance.CacheManager?.ForceReInitializeCacheAsync();
        command.ReplyToCommand("Reloaded bans");
    }

    /// <summary>
    /// Reloads admin data asynchronously and updates admin caches.
    /// </summary>
    /// <param name="caller">The player issuing the reload command.</param>
    public void ReloadAdmins(CCSPlayerController? caller)
    {
        if (DatabaseProvider == null) return;

        Task.Run(async () =>
        {
            await PermissionManager.CrateGroupsJsonFile();
            await PermissionManager.CreateAdminsJsonFile();

            var adminsFile = await File.ReadAllTextAsync(Instance.ModuleDirectory + "/data/admins.json");
            var groupsFile = await File.ReadAllTextAsync(Instance.ModuleDirectory + "/data/groups.json");

            await Server.NextWorldUpdateAsync(() =>
            {
                AddTimer(1, () =>
                {
                    if (!string.IsNullOrEmpty(adminsFile))
                        AddTimer(2.0f, () => AdminManager.LoadAdminData(ModuleDirectory + "/data/admins.json"));
                    if (!string.IsNullOrEmpty(groupsFile))
                        AddTimer(3.0f, () => AdminManager.LoadAdminGroups(ModuleDirectory + "/data/groups.json"));
                    if (!string.IsNullOrEmpty(adminsFile))
                        AddTimer(4.0f, () => AdminManager.LoadAdminData(ModuleDirectory + "/data/admins.json"));

                    _logger?.LogInformation("Loaded admins!");


l = "file://" + cachePath.getPath();
                if (url.startsWith(cacheUrl)) {
                    url = url.substring(cacheUrl.length());
                }
            }
        }

        if (url.startsWith("file://")) {
            return realUrl(url);
        }

        String newUrl = url;
        try {
            URL tmp = new URL(websiteUrl);
            if (url.startsWith("//")) {
                return realUrl(tmp.getProtocol() + ":" + url);
            }
            newUrl = tmp.getProtocol() + "://" + tmp.getHost();
            newUrl+= (tmp.getPort() > -1 && tmp.getPort() != 80) ? (":" + tmp.getPort()) : "";
            if (url.startsWith("/")) {
                if (websiteUrl.startsWith("file://assets/")) {
                    newUrl = "file://assets" + url;
                }else{
                    newUrl+= url;
                }
            }else{
                String path = "/";
                int lastIndex = tmp.getPath().lastIndexOf("/");
                if (lastIndex > -1){
                    path = tmp.getPath().substring(0, lastIndex + 1);
                }
                newUrl+= path + url;
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        return realUrl(newUrl);
    }

    /**
     * 获取父级地址
     * @param pageUrl
     * @return
     */
    public static String getWebsiteUrl(Object pageUrl) {
        String websiteUrl = null;
        if (pageUrl instanceof String) {
            websiteUrl = (String) pageUrl;
        }
        if (websiteUrl == null && pageUrl instanceof WXSDKInstance) {
            String tabbarUrl = ((WXSDKInstance) pageUrl).getContainerInfo().get("eeuiTabbarUrl");
            if (!TextUtils.isEmpty(tabbarUrl)) {
                websiteUrl = tabbarUrl;
            }
            pageUrl = ((WXSDKInstance) pageUrl).getContext();
        }
        if (websiteUrl == null && pageUrl instanceof View) {
            ViewGroup parentViewGroup = (ViewGroup) ((View) pageUrl).getParent();
            while (parentViewGroup != null) {
                if (parentViewGroup instanceof TabbarFrameLayoutView) {
                    websiteUrl = ((TabbarFrameLayoutView) parentViewGroup).getUrl();
                    break;
                }
                try {
                    parentViewGroup = (ViewGroup) parentViewGroup.getParent();
                } catch (ClassCastException e) {
                    parentViewGroup = null;
                }
            }
            pageUrl = ((View) pageUrl).getContext();
        }
        if (websiteUrl == null && pageUrl instanceof PageActivity) {
            PageBean mPageBean = ((PageActivity) pageUrl).getPageInfo();
            if (mPageBean != null) {
                websiteUrl = mPageBean.getUrl();
            }
        }
        return websiteUrl;
    }

    /**
     * 获取地址中的参数返回 JSONObject
     * @param url
     * @return
     */
    public static JSONObject getUrlQuery(String url) {
        JSONObject queryJson = new JSONObject();
        if (url == null) {
            return queryJson;
        }
        url = url.trim();
        if (url.equals("")) {
            return queryJson;
        }
        String[] urlParts = url.split("\\?");
        //没有参数
        if (urlParts.length == 1) {
            return queryJson;
        }
        //有参数
        String[] params = urlParts[1].split("&");
        for (String param : params) {
            String[] keyValue = param.split("=");
            queryJson.put(key


///
/// Copyright (c) 2016 Dropbox, Inc. All rights reserved.
///
/// Auto-generated by Stone, do not modify.
///

#import <Foundation/Foundation.h>

#import "DBSerializableProtocol.h"

@class DBTEAMLOGSharedContentViewType;

NS_ASSUME_NONNULL_BEGIN

#pragma mark - API Object

///
/// The `SharedContentViewType` struct.
///
/// This class implements the `DBSerializable` protocol (serialize and
/// deserialize instance methods), which is required for all Obj-C SDK API route
/// objects.
///
@interface DBTEAMLOGSharedContentViewType : NSObject <DBSerializable, NSCopying>

#pragma mark - Instance fields

/// (no description).
@property (nonatomic, readonly, copy) NSString *description_;

#pragma mark - Constructors

///
/// Full constructor for the struct (exposes all instance variables).
///
/// @param description_ (no description).
///
/// @return An initialized instance.
///
- (instancetype)initWithDescription_:(NSString *)description_;

- (instancetype)init NS_UNAVAILABLE;

@end

#pragma mark - Serializer Object

///
/// The serialization class for the `SharedContentViewType` struct.
///
@interface DBTEAMLOGSharedContentViewTypeSerializer : NSObject

///
/// Serializes `DBTEAMLOGSharedContentViewType` instances.
///
/// @param instance An instance of the `DBTEAMLOGSharedContentViewType` API
/// object.
///
/// @return A json-compatible dictionary representation of the
/// `DBTEAMLOGSharedContentViewType` API object.
///
+ (nullable NSDictionary<NSString *, id> *)serialize:(DBTEAMLOGSharedContentViewType *)instance;

///
/// Deserializes `DBTEAMLOGSharedContentViewType` instances.
///
/// @param dict A json-compatible dictionary representation of the
/// `DBTEAMLOGSharedContentViewType` API object.
///
/// @return An instantiation of the `DBTEAMLOGSharedContentViewType` object.
///
+ (DBTEAMLOGSharedContentViewType *)deserialize:(NSDictionary<NSString *, id> *)dict;

@end

NS_ASSUME_NONNULL_END


ateNumRange(
      'uplinkLossPercent',
      uplinkLossPercent,
      0,
      100,
    );
    final headers = <String, String>{
      'Content-Type': 'application/x-amz-json-1.1',
      'X-Amz-Target': 'DeviceFarm_20150623.UpdateNetworkProfile'
    };
    final jsonResponse = await _protocol.send(
      method: 'POST',
      requestUri: '/',
      exceptionFnMap: _exceptionFns,
      // TODO queryParams
      headers: headers,
      payload: {
        'arn': arn,
        if (description != null) 'description': description,
        if (downlinkBandwidthBits != null)
          'downlinkBandwidthBits': downlinkBandwidthBits,
        if (downlinkDelayMs != null) 'downlinkDelayMs': downlinkDelayMs,
        if (downlinkJitterMs != null) 'downlinkJitterMs': downlinkJitterMs,
        if (downlinkLossPercent != null)
          'downlinkLossPercent': downlinkLossPercent,
        if (name != null) 'name': name,
        if (type != null) 'type': type.value,
        if (uplinkBandwidthBits != null)
          'uplinkBandwidthBits': uplinkBandwidthBits,
        if (uplinkDelayMs != null) 'uplinkDelayMs': uplinkDelayMs,
        if (uplinkJitterMs != null) 'uplinkJitterMs': uplinkJitterMs,
        if (uplinkLossPercent != null) 'uplinkLossPercent': uplinkLossPercent,
      },
    );

    return UpdateNetworkProfileResult.fromJson(jsonResponse.body);
  }

  /// Modifies the specified project name, given the project ARN and a new name.
  ///
  /// May throw [ArgumentException].
  /// May throw [NotFoundException].
  /// May throw [LimitExceededException].
  /// May throw [ServiceAccountException].
  ///
  /// Parameter [arn] :
  /// The Amazon Resource Name (ARN) of the project whose name to update.
  ///
  /// Parameter [defaultJobTimeoutMinutes] :
  /// The number of minutes a test run in the project executes before it times
  /// out.
  ///
  /// Parameter [name] :
  /// A string that represents the new name of the project that you are
  /// updating.
  ///
  /// Parameter [vpcConfig] :
  /// The VPC security groups and subnets that are attached to a project.
  Future<UpdateProjectResult> updateProject({
    required String arn,
    int? defaultJobTimeoutMinutes,
    String? name,
    VpcConfig? vpcConfig,
  }) async {
    final headers = <String, String>{
      'Content-Type': 'application/x-amz-json-1.1',
      'X-Amz-Target': 'DeviceFarm_20150623.UpdateProject'
    };
    final jsonResponse = await _protocol.send(
      method: 'POST',
      requestUri: '/',
      exceptionFnMap: _exceptionFns,
      // TODO queryParams
      headers: headers,
      payload: {
        'arn': arn,
        if (defaultJobTimeoutMinutes != null)
          'defaultJobTimeoutMinutes': defaultJobTimeoutMinutes,
        if (name != null) 'name': name,
        if (vpcConfig != null) 'vpcConfig': vpcConfig,
      },
    );

    return UpdateProjectResult.fromJson(jsonResponse.body);
  }

  /// Change details of a project.
  ///
  /// May throw [NotFoundException].
  /// May throw [ArgumentException].
  /// May throw [LimitExceededException].
  /// May throw [InternalServiceException].
  ///
  /// Parameter [projectArn] :
  /// ARN of the project to update.
  ///
  /// Parameter [description] :
  /// Human-readable description for the project.
  ///
  /// Parameter [name] :
  /// Human-readable name for the project.
  ///
  /// Parameter [vpcConfig] :
  /// The VPC security groups and subnets that are attached to a project.
  Future<UpdateTestGridProjectResult> updateTestGridProject


		{Method: "POST", Path: "/api/v1/message/sendWhisper", Category: "消息", Desc: "发送私信"},
		{Method: "POST", Path: "/api/v1/partition/addPartition", Category: "分区", Desc: "添加分区（后台管理）"},
		{Method: "DELETE", Path: "/api/v1/partition/deletePartition/:id", Category: "分区", Desc: "删除分区（后台管理）"},
		{Method: "POST", Path: "/api/v1/relation/follow", Category: "关注", Desc: "关注用户"},
		{Method: "GET", Path: "/api/v1/relation/getUserRelation", Category: "关注", Desc: "获取用户关系"},
		{Method: "POST", Path: "/api/v1/relation/unfollow", Category: "关注", Desc: "取关用户"},
		{Method: "DELETE", Path: "/api/v1/resource/deleteResource/:id", Category: "资源", Desc: "删除视频资源"},
		{Method: "PUT", Path: "/api/v1/resource/modifyTitle", Category: "资源", Desc: "修改资源标题"},
		{Method: "GET", Path: "/api/v1/review/getArticleReviewRecord", Category: "审核", Desc: "获取文章审核记录"},
		{Method: "GET", Path: "/api/v1/review/getVideoReviewRecord", Category: "审核", Desc: "获取视频审核记录"},
		{Method: "POST", Path: "/api/v1/review/reviewArticleApproved", Category: "审核", Desc: "文章审核通过（后台管理）"},
		{Method: "POST", Path: "/api/v1/review/reviewArticleFailed", Category: "审核", Desc: "文章审核不通过（后台管理）"},
		{Method: "POST", Path: "/api/v1/review/reviewVideoApproved", Category: "审核", Desc: "视频审核通过（后台管理）"},
		{Method: "POST", Path: "/api/v1/review/reviewVideoFailed", Category: "审核", Desc: "视频审核不通过（后台管理）"},
		{Method: "POST", Path: "/api/v1/role/addRole", Category: "角色", Desc: "添加角色（后台管理）"},
		{Method: "DELETE", Path: "/api/v1/role/deleteRole/:id", Category: "角色", Desc: "删除角色（后台管理）"},
		{Method: "PUT", Path: "/api/v1/role/editRole", Category: "角色", Desc: "编辑角色（后台管理）"},
		{Method: "PUT", Path: "/api/v1/role/editRoleHome", Category: "角色", Desc: "编辑角色首页（后台管理）"},
		{Method: "GET", Path: "/api/v1/role/getAllRoleList", Category: "角色", Desc: "获取全部角色（后台管理）"},
		{Method: "GET", Path: "/api/v1/role/getRoleInfo", Category: "角色", Desc: "获取个人角色信息（后台管理）"},
		{Method: "POST", Path: "/api/v1/role/getRoleList", Category:


, 1f);
            }
            this.boss.getWorld().playSound(null, this.boss.getBlockPos(), SoundEvents.ENTITY_GENERIC_EXPLODE, SoundCategory.HOSTILE, 1f, 1f);
            this.lavaRadius++;
        }
        if (this.attackStatus >= 25) {
            this.resetAttackCooldown(.5f);
            this.resetSpecialCooldown(1.2f);
            this.checkAndSetAttack(null, this.boss.getTarget());
            this.lavaRadius = 4;
        }
    }

    private void summonLava(int r) {
        for (int theta = 0; theta < 360; theta += 15) {
            double x0 = this.boss.getX();
            double z0 = this.boss.getZ();
            double x = x0 + r * Math.cos(theta * Math.PI / 180);
            double z = z0 + r * Math.sin(theta * Math.PI / 180);
            BlockPos pos = BlockPos.ofFloored(x, this.boss.getY(), z);
            if (this.boss.getWorld().getBlockState(pos).isAir()) {
                this.boss.getWorld().setBlockState(pos, Blocks.LAVA.getDefaultState());
                this.boss.lavaPos.add(pos);
            }
        }
        this.lavaTimer = 30;
    }

    private void spinAttack() {
        this.attackStatus++;
        if (this.attackStatus >= 7 && this.attackStatus <= 40) {
            Box chunkBox = new Box(this.boss.getBlockPos()).expand(6);
            List<Entity> nearbyEntities = this.boss.getWorld().getOtherEntities(this.boss, chunkBox);
            for (Entity nearbyEntity : nearbyEntities) {
                if (nearbyEntity instanceof LivingEntity closestTarget) {
                    double x = closestTarget.getX() - (this.boss.getX());
                    double z = closestTarget.getZ() - this.boss.getZ();
                    this.damageTarget(closestTarget, this.boss.getWorld().getDamageSources().mobAttack(this.boss), 10f);
                    closestTarget.takeKnockback(4F, -x, -z);
                }
            }
        }
        if (this.attackStatus >= 45) {
            this.resetAttackCooldown(.5f);
            this.resetSpecialCooldown(1.2f);
            this.checkAndSetAttack(null, this.boss.getTarget());
        }
    }

    private void heatWaveAttack() {
        this.attackStatus++;
        if (this.attackStatus >= 16 && this.attackStatus <= 18) {
            if (this.attackStatus == 17) {
                this.boss.getWorld().playSound(null, this.boss.getBlockPos(), SoundEvents.ENTITY_GENERIC_EXPLODE, SoundCategory.HOSTILE, 5f, 1f);
            }
            Box chunkBox = new Box(this.boss.getBlockPos()).expand(5);
            List<Entity> nearbyEntities = this.boss.getWorld().getOtherEntities(this.boss, chunkBox);
            for (Entity nearbyEntity : nearbyEntities) {
                if (nearbyEntity instanceof LivingEntity closestTarget) {
                    double x = closestTarget.getX() - (this.boss.getX());
                    double z = closestTarget.getZ() - this.boss.getZ();
                    closestTarget.takeKnockback(10F, -x, -z);
                    this.damageTarget(closestTarget, this.boss.getWorld().getDamageSources().mobAttack(this.boss), 50f);
                }
            }
            if (!this.boss.getWorld().isClient) {
                ParticleHandler.particleSphere(this.boss.getWorld(), 1000, this.boss.get


pltu r15, r16, r17 }
	{ v1ddotpua r5, r6, r7 ; v2packl r15, r16, r17 }
	{ v1ddotpus r5, r6, r7 ; cmplts r15, r16, r17 }
	{ v1ddotpus r5, r6, r7 ; ld2u r15, r16 }
	{ v1ddotpus r5, r6, r7 ; prefetch_add_l2_fault r15, 5 }
	{ v1ddotpus r5, r6, r7 ; stnt2 r15, r16 }
	{ v1ddotpus r5, r6, r7 ; v2cmpeqi r15, r16, 5 }
	{ v1ddotpus r5, r6, r7 ; xor r15, r16, r17 }
	{ v1ddotpusa r5, r6, r7 ; icoh r15 }
	{ v1ddotpusa r5, r6, r7 ; lnk r15 }
	{ v1ddotpusa r5, r6, r7 ; shrs r15, r16, r17 }
	{ v1ddotpusa r5, r6, r7 ; v1maxui r15, r16, 5 }
	{ v1ddotpusa r5, r6, r7 ; v2shrsi r15, r16, 5 }
	{ v1dotp r5, r6, r7 ; dblalign4 r15, r16, r17 }
	{ v1dotp r5, r6, r7 ; ld_add r15, r16, 5 }
	{ v1dotp r5, r6, r7 ; prefetch_l2_fault r15 }
	{ v1dotp r5, r6, r7 ; subx r15, r16, r17 }
	{ v1dotp r5, r6, r7 ; v2cmpltui r15, r16, 5 }
	{ v1dotpa r5, r6, r7 ; addxi r15, r16, 5 }
	{ v1dotpa r5, r6, r7 ; jalr r15 }
	{ v1dotpa r5, r6, r7 ; moveli r15, 0x1234 }
	{ v1dotpa r5, r6, r7 ; st r15, r16 }
	{ v1dotpa r5, r6, r7 ; v1shli r15, r16, 5 }
	{ v1dotpa r5, r6, r7 ; v4addsc r15, r16, r17 }
	{ v1dotpu r5, r6, r7 ; fetchadd4 r15, r16, r17 }
	{ v1dotpu r5, r6, r7 ; ldnt1u r15, r16 }
	{ v1dotpu r5, r6, r7 ; shl r15, r16, r17 }
	{ v1dotpu r5, r6, r7 ; v1cmpeqi r15, r16, 5 }
	{ v1dotpu r5, r6, r7 ; v2mins r15, r16, r17 }
	{ v1dotpua r5, r6, r7 ; cmpeqi r15, r16, 5 }
	{ v1dotpua r5, r6, r7 ; ld1s_add r15, r16, 5 }
	{ v1dotpua r5, r6, r7 ; ori r15, r16, 5 }
	{ v1dotpua r5, r6, r7 ; st4_add r15, r16, 5 }
	{ v1dotpua r5, r6, r7 ; v1subuc r15, r16, r17 }
	{ v1dotpua r5, r6, r7 ; v4shrs r15, r16, r17 }
	{ v1dotpus r5, r6, r7 ; fetchor4 r15, r16, r17 }
	{ v1dotpus r5, r6, r7


//----------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//----------------------------------------------------------------

namespace System.ServiceModel.Discovery.VersionCD1
{
    using System.ServiceModel;

    [ServiceContract(
        Name = ProtocolStrings.ContractNames.DiscoveryManagedContractName,
        Namespace = ProtocolStrings.VersionCD1.Namespace)]
    interface IDiscoveryContractManagedCD1
    {
        [OperationContract(Action = ProtocolStrings.VersionCD1.ProbeAction, ReplyAction = ProtocolStrings.VersionCD1.ProbeMatchesAction)]
        ProbeMatchesMessageCD1 ProbeOperation(ProbeMessageCD1 request);

        [OperationContract(Action = ProtocolStrings.VersionCD1.ProbeAction, ReplyAction = ProtocolStrings.Versi


FA9A;6F22;6F22;6F22;6F22; # (漢; 漢; 漢; 漢; 漢; ) CJK COMPATIBILITY IDEOGRAPH-FA9A
FA9B;701E;701E;701E;701E; # (瀞; 瀞; 瀞; 瀞; 瀞; ) CJK COMPATIBILITY IDEOGRAPH-FA9B
FA9C;716E;716E;716E;716E; # (煮; 煮; 煮; 煮; 煮; ) CJK COMPATIBILITY IDEOGRAPH-FA9C
FA9D;77A7;77A7;77A7;77A7; # (瞧; 瞧; 瞧; 瞧; 瞧; ) CJK COMPATIBILITY IDEOGRAPH-FA9D
FA9E;7235;7235;7235;7235; # (爵; 爵; 爵; 爵; 爵; ) CJK COMPATIBILITY IDEOGRAPH-FA9E
FA9F;72AF;72AF;72AF;72AF; # (犯; 犯; 犯; 犯; 犯; ) CJK COMPATIBILITY IDEOGRAPH-FA9F
FAA0;732A;732A;732A;732A; # (猪; 猪; 猪; 猪; 猪; ) CJK COMPATIBILITY IDEOGRAPH-FAA0
FAA1;7471;7471;7471;7471; # (瑱; 瑱; 瑱; 瑱; 瑱; ) CJK COMPATIBILITY IDEOGRAPH-FAA1
FAA2;7506;7506;7506;7506; # (甆; 甆; 甆; 甆; 甆; ) CJK COMPATIBILITY IDEOGRAPH-FAA2
FAA3;753B;753B;753B;753B; # (画; 画; 画; 画; 画; ) CJK COMPATIBILITY IDEOGRAPH-FAA3
FAA4;761D;761D;761D;761D; # (瘝; 瘝; 瘝; 瘝; 瘝; ) CJK COMPATIBILITY IDEOGRAPH-FAA4
FAA5;761F;761F;761F;761F; # (瘟; 瘟; 瘟; 瘟; 瘟; ) CJK COMPATIBILITY IDEOGRAPH-FAA5
FAA6;76CA;76CA;76CA;76CA; # (益; 益; 益; 益; 益; ) CJK COMPATIBILITY IDEOGRAPH-FAA6
FAA7;76DB;76DB;76DB;76DB; # (盛; 盛; 盛; 盛; 盛; ) CJK COMPATIBILITY IDEOGRAPH-FAA7
FAA8;76F4;76F4;76F4;76F4; # (直; 直; 直; 直; 直; ) CJK COMPATIBILITY IDEOGRAPH-FAA8
FAA9;774A;774A;774A;774A; # (睊; 睊; 睊; 睊; 睊; ) CJK COMPATIBILITY IDEOGRAPH-FAA9
FAAA;7740;7740;7740;7740; # (着; 着; 着; 着; 着; ) CJK COMPATIBILITY IDEOGRAPH-FAAA
FAAB;78CC;78CC;78CC;78CC; # (磌; 磌; 磌; 磌; 磌; ) CJK COMPATIBILITY IDEOGRAPH-FAAB
FAAC;7AB1;7AB1;7AB1;7AB1; # (窱; 窱; 窱; 窱; 窱


fine TR_XIFREC       25      /* reclaim from free list instead of fsys */
#define TR_WAITMEM      26      /* wait for memory in pagein */
#define TR_EWAITMEM     27      /* end memory wait in pagein */
#define TR_ZFOD         28      /* zfod page fault */
#define TR_EXFOD        29      /* exec fod page fault */
#define TR_VRFOD        30      /* vread fod page fault */
#define TR_CACHEFOD     31      /* fod in file system cache */
#define TR_SWAPIN       32      /* drum page fault */
#define TR_PGINDONE     33      /* page in done */
#define TR_SWAPIO       34      /* swap i/o request arrives */

/*
 * System call trace points.
 */
#define TR_VADVISE      40      /* vadvise occurred with <arg, pid> */

/*
 * Miscellaneous
 */
#define TR_STAMP        45      /* user said vtrace(VTR_STAMP, value); */

/*
 * This defines the size of the trace flags array.
 */
#define TR_NFLAGS       100     /* generous */

#define TRCSIZ          4096

/*
 * Specifications of the vtrace() system call, which takes one argument.
 */
#define VTRACE          64+51

#define VTR_DISABLE     0               /* set a trace flag to 0 */
#define VTR_ENABLE      1               /* set a trace flag to 1 */
#define VTR_VALUE       2               /* return value of a trace flag */
#define VTR_UALARM      3               /* set alarm to go off (sig 16) */
                                        /* in specified number of hz */
#define VTR_STAMP       4               /* user specified stamp */

#endif /* __APPLE_API_OBSOLETE */

#endif /* !_SYS_TRACE_H_ */


b.hi	445428 <_dl_relocate_object+0xe80>  // b.pmore
  445228:	d00002c1 	adrp	x1, 49f000 <__sys_errlist_internal+0x320>
  44522c:	f9477821 	ldr	x1, [x1, #3824]
  445230:	b9400021 	ldr	w1, [x1]
  445234:	7100003f 	cmp	w1, #0x0
  445238:	fa421002 	ccmp	x0, x2, #0x2, ne  // ne = any
  44523c:	54000f63 	b.cc	445428 <_dl_relocate_object+0xe80>  // b.lo, b.ul, b.last
  445240:	f9406ba3 	ldr	x3, [x29, #208]
  445244:	aa0503e1 	mov	x1, x5
  445248:	aa1a03e0 	mov	x0, x26
  44524c:	f9400863 	ldr	x3, [x3, #16]
  445250:	eb02007f 	cmp	x3, x2
  445254:	9a829062 	csel	x2, x3, x2, ls  // ls = plast
  445258:	97feebfe 	bl	400250 <.plt+0x10>
  44525c:	17ffffc6 	b	445174 <_dl_relocate_object+0xbcc>
  445260:	71101e9f 	cmp	w20, #0x407
  445264:	54000220 	b.eq	4452a8 <_dl_relocate_object+0xd00>  // b.none
  445268:	7110229f 	cmp	w20, #0x408
  44526c:	54000d41 	b.ne	445414 <_dl_relocate_object+0xe6c>  // b.any
  445270:	d00002c1 	adrp	x1, 49f000 <__sys_errlist_internal+0x320>
  445274:	f9479c21 	ldr	x1, [x1, #3896]
  445278:	f9400a60 	ldr	x0, [x19, #16]
  44527c:	f9400322 	ldr	x2, [x25]
  445280:	8b000042 	add	x2, x2, x0
  445284:	f9400020 	ldr	x0, [x1]
  445288:	d63f0040 	blr	x2
  44528c:	f83c6ae0 	str	x0, [x23, x28]
  445290:	17ffffb9 	b	445174 <_dl_relocate_object+0xbcc>
  445294:	d503201f 	nop
  445298:	321f0000 	orr	w0, w0, #0x2
  44529c:	52800005 	mov	w5, #0x0                   	// #0
  4452a0:	17ffff99 	b	445104 <_dl_relocate_object+0xb5c>
  4452a4:	f9406ba0 	ldr	x0, [x29, #208]
  4452a8:	b40006c0 	cbz	x0, 445380 <_dl_relocate_object+0xdd8>
  4452ac:	f9422061 	ldr	x1, [x3, #1088]
  4452b0:	91000422 	add	x2, x1, #0x1
  4452b4:	f100045f


keyTableSpanishToEnglish[virtkey]);
}

/*-----------------------------------------------------------------------------
    Name        : keyItalianToEnglish
    Description : This function converts german keyboard presses to english
    Inputs      : udword virtkey
    Outputs     : udword
    Parameters  : udword virtkey
    Return      : void
-----------------------------------------------------------------------------*/
udword keyItalianToEnglish(udword virtkey)
{
    return (keyTableItalianToEnglish[virtkey]);
}


  while self.rpc.get_height().await < (lock_height + (T0 as isize)) {
      tokio::time::delay_for(std::time::Duration::from_secs(20)).await;
    }

    let refund = self.refund.as_ref().expect("Trying to get the refund despite not having a refund transaction");

    // Ignore this result
    // Publishing an existing transaction can cause an error
    let _ = self.rpc.publish(&serialize(refund)).await;

    let refund_script = self.refund_script.as_ref().expect("Trying to recover key despite not having a refund transaction");
    let refund_address = Address::p2wsh(refund_script, NETWORK).to_string();
    loop {
      #[cfg(test)]
      for _ in 0 .. T0 {
        self.rpc.mine_block().await?;
      }

      let history = self.rpc.get_address_history(&refund_address).await;
      if (history.len() > 0) && ((history[0].confirmations) >= CONFIRMATIONS) {
        break;
      }
      tokio::time::delay_for(std::time::Duration::from_secs(20)).await;
    }
    let refund_height = self.rpc.get_height().await;

    while self.rpc.get_height().await < (refund_height + (T1 as isize)) {
      #[cfg(test)]
      for _ in 0 .. T1 {
        self.rpc.mine_block().await?;
      }

      // Check if host spent refund
      if let Some(recovered_key) = self.attempt_key_recovery(&refund_address).await {
        return Ok(Some(recovered_key));
      }
    }

    let mut claim = Transaction {
      version: 2,
      lock_time: 0,
      input: vec![
        TxIn {
          previous_output: OutPoint {
            txid: refund.txid(),
            vout: 0
          },
          script_sig: Script::new(),
          sequence: T1 as u32,
          witness: vec![
            vec![0; 65],
            Vec::new(),
            refund_script.to_bytes()
          ]
        }
      ],
      output: vec![
        TxOut {
          script_pubkey: self.destination_script.clone(),
          value: refund.output[0].value
        }
      ]
    };
    let fee = ((claim.get_weight() as u64) / 4) * self.rpc.get_fee_per_byte().await?;
    claim.output[0].value = claim.output[0].value.checked_sub(fee)
      .ok_or_else(|| anyhow::anyhow!("Not enough Bitcoin to pay for {} sats of fees", fee))?;

    let components = SighashComponents::new(&claim);
    claim.input[0].witness[0] = SECP.sign(
      &secp256k1::Message::from_slice(
        &components.sighash_all(
          &claim.input[0],
          &refund_script,
          refund.output[0].value
        )
      )?,
      &secp256k1::SecretKey::from_slice(
        &Secp256k1Engine::private_key_to_bytes(&self.engine.b)
      ).expect("Secp256k1Engine generated an invalid secp256k1 key")
    ).serialize_der().to_vec();
    claim.input[0].witness[0].push(1);

    let _ = self.rpc.publish(&serialize(&claim)).await;
    let claim_id = claim.txid();

    // Wait for a confirmation
    loop {
      #[cfg(test)]
      self.rpc.mine_block().await?;

      let destination_history = self.rpc.get_address_history(&self.destination).await;
      let mut found = false;
      for tx in destination_history {
        if (tx.tx.txid()) == (claim_id.clone()) {
          found = true;
          if (tx.confirmations) >=


;action=edit&redlink=1" class="new" title="挖竹笋的老翁（页面不存在）">挖竹笋的老翁 • 住在西面的樵夫 • 稗田阿礼 • 稗田阿一 • 稗田阿尔 • 稗田阿未 • 稗田阿余 • 稗田阿悟 • 稗田阿梦 • 稗田阿七 • 稗田阿弥 • 阎魔王 • 阎魔 • 死神 • <a href="/index.php?title=%E9%AC%BC%E7%A5%9E%E9%


>((e,t)=>(e=>I.from(e.selection.getRng()).bind((t=>{const n=e.getBody();return t.startContainer===n&&0===t.startOffset?I.none():I.from(e.selection.getStart(!0))})))(e).orThunk(T(lO,e)).map(yn).filter(Wt).bind(t))(e,S(I.some,t)),cO=(e,t)=>{if(/^[0-9.]+$/.test(t)){const n=parseInt(t,10);if(n>=1&&n<=7){const o=(e=>Pt.explode(e.options.get("font_size_style_values")))(e),r=(e=>Pt.explode(e.options.get("font_size_classes")))(e);return r.length>0?r[n-1]||t:o[n-1]||t}return t}return t},uO=e=>{const t=e.split(/\s*,\s*/);return q(t,(e=>-1===e.indexOf(" ")||He(e,'"')||He(e,"'")?e:`'${e}'`)).join(",")},mO=(e,t)=>{const n=e.dom,o=e.selection.getRng(),r=t?e.selection.getStart():e.selection.getEnd(),s=t?o.startContainer:o.endContainer,a=bN(n,s);if(!a||!a.isContentEditable)return;const i=t?po:ho,l=Il(e);((e,t,n,o)=>{const r=e.dom,s=e=>r.isBlock(e)&&e.parentElement===n,a=s(t)?t:r.getParent(o,s,n);return I.from(a).map(yn)})(e,r,a,s).each((t=>{const n=wN(e,s,t.dom,a,!1,l);i(t,yn(n)),e.selection.setCursorLocation(n,0),e.dispatch("NewBlock",{newBlock:n}),cN(e,"insertParagraph")}))},fO=e=>{eO(e),(e=>{e.editorCommands.addCommands({"Cut,Copy,Paste":t=>{const n=e.getDoc();let o;try{n.execCommand(t)}catch(e){o=!0}if("paste"!==t||n.queryCommandEnabled(t)||(o=!0),o||!n.queryCommandSupported(t)){let t=e.translate("Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.");(At.os.isMacOS()||At.os.isiOS())&&(t=t.replace(/Ctrl\+/g,"\u2318+")),e.notificationManager.open({text:t,type:"error"})}}})})(e),(e=>{e.editorCommands.addCommands({mceAddUndoLevel:()=>{e.undoManager.add()},mceEndUndoLevel:()=>{e.undoManager.add()},Undo:()=>{e.undoManager.undo()},Redo:()=>{e.undoManager.redo()}})})(e),(e=>{e.editorCommands.addCommands({mceSelectNodeDepth:(t,n,o)=>{let r=0;e.dom.getParent(e.selection.getNode(),(t=>!qo(t)||r++!==o||(e.selection.select(t),!1)),e.getBody())},mceSelectNode:(t,n,o)=>{e.selection.select(o)},selectAll:()=>{const t=e.dom.getParent(e.selection.getStart(),lr);if(t){const n=e.dom.createRng();n.selectNodeContents(t),e.selection.setRng(n)}}})})(e),(e=>{e.editorCommands.addCommands({mceCleanup:()=>{const t=e.selection.getBookmark();e.setContent(e.getContent()),e.selection.moveToBookmark(t)},insert


>(h: Handle, s: Static<T>, ent: StaticE<T>): Promise<void> {
  if (ent.value === Computation.Pending && ent.networkRequest === undefined && ent.lastError === undefined) {
    try {
      const res = await runNetworkRequest(h, s, "fetchStatic", s.fetch());
      resolveStatic(h, s, res);
    } catch (e) {
      // Ignore errors. runNetworkRequest already sets 'lastError'.
    }
  }
}
import {
  type CompletionItem,
  CompletionItemKind,
  InsertTextFormat,
  type MarkupContent,
  MarkupKind,
  TextEdit,
} from "vscode-languageserver";

import type { Node } from "@marko/language-tools";

import type { CompletionMeta, CompletionResult } from ".";

export function AttrName({
  offset,
  node,
  file: { parsed, lookup },
}: CompletionMeta<Node.AttrName>): CompletionResult {
  let name = parsed.read(node);
  const modifierIndex = name.indexOf(":");
  const hasModifier = modifierIndex !== -1;

  if (hasModifier) {
    if (offset >= node.start + modifierIndex) {
      return [
        {
          label: "scoped",
          kind: CompletionItemKind.Keyword,
          detail: "Use to prefix with a unique ID",
        },
        {
          label: "no-update",
          kind: CompletionItemKind.Keyword,
          detail: "Use to skip future updates to this attribute",
        },
      ];
    } else {
      name = name.slice(0, modifierIndex);
    }
  }

  const completions: CompletionItem[] = [];
  const attrNameLoc = parsed.locationAt(
    hasModifier
      ? {
          start: node.start,
          end: node.start + name.length,
        }
      : node
  );

  const tagName = node.parent.parent.nameText || "";
  const tagDef = tagName && lookup.getTag(tagName);
  const nestedTagAttrs: { [x: string]: boolean } = {};

  if (tagDef && tagDef.nestedTags) {
    for (const key in tagDef.nestedTags) {
      const nestedTagDef = tagDef.nestedTags[key];
      nestedTagAttrs[nestedTagDef.targetProperty] = true;
    }
  }

  lookup.forEachAttribute(tagName, (attr, parent) => {
    if (
      attr.deprecated ||
      nestedTagAttrs[attr.name] ||
      attr.name === "*" ||
      attr.type === "never" ||
      (attr.name[0] === "_" &&
        isExternalModule(attr.filePath || parent.filePath))
    ) {
      return;
    }

    const type = attr.type || (attr.html ? "string" : null);
    const documentation: MarkupContent = {
      kind: MarkupKind.Markdown,
      value: attr.description || "",
    };
    let label = attr.name;
    let snippet = attr.name;

    if (attr.enum) {
      // TODO: We should use the following, but vscode has a regression with multi choice snippets form the language server.
      // snippet += `="\${1|${attr.enum.join()}|}"$0`;
      snippet += `="$1"$0`;
    } else {
      switch (type) {
        case "string":
          snippet += '="$1"$0';
          break;
        case "function":
          snippet += "=($1)$0";
          break;
        case "statement":


er the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.

  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General
  Public License along with this library; if not, write to the
  Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  Boston, MA  02111-1307  USA
*/

package processing.core;

/**
 * 3x2 affine matrix implementation.
 * Matrices are used to describe a transformation; see {@link PMatrix} for a
 * general description. This matrix looks like the following when multiplying
 * a vector (x, y) in {@code mult()}.
 *

 * [m00 m01 m02][x]   [m00*x + m01*y + m02*1]   [x']
 * [m10 m11 m12][y] = [m10*x + m11*y + m12*1] = [y']
 * [ 0   0   1 ][1]   [ 0*x  +  0*y  +  1*1 ]   [ 1]

 * (x', y') is returned. The values in the matrix determine the transformation.
 * They are modified by the various transformation functions.
 */
public class PMatrix2D implements PMatrix {

  public float m00, m01, m02;
  public float m10, m11, m12;

  /**
   * Create a new matrix, set to the identity matrix.
   */
  public PMatrix2D() {
    reset();
  }

  public PMatrix2D(float m00, float m01, float m02,
                   float m10, float m11, float m12) {
    set(m00, m01, m02,
        m10, m11, m12);
  }

  public PMatrix2D(PMatrix matrix) {
    set(matrix);
  }

  public void reset() {
    set(1, 0, 0,
        0, 1, 0);
  }

  /**
   * Returns a copy of this PMatrix.
   */
  public PMatrix2D get() {
    PMatrix2D outgoing = new PMatrix2D();
    outgoing.set(this);
    return outgoing;
  }

  /**
   * Copies the matrix contents into a 6 entry float array.
   * If target is null (or not the correct size), a new array will be created.
   * Returned in the order {@code {m00, m01, m02, m10, m11, m12}}.
   */
  public float[] get(float[] target) {
    if ((target == null) || (target.length != 6)) {
      target = new float[6];
    }
    target[0] = m00;
    target[1] = m01;
    target[2] = m02;

    target[3] = m10;
    target[4] = m11;
    target[5] = m12;

    return target;
  }

  /**
   * If matrix is a PMatrix2D, sets this matrix to be a copy of it.
   * @throws IllegalArgumentException If <tt>matrix</tt> is not 2D.
   */
  public void set(PMatrix matrix) {
    if (matrix instanceof PMatrix2D) {
      PMatrix2D src = (PMatrix2D) matrix;
      set(src.m00, src.m01, src.m02,
          src.m10, src.m11, src.m12);
    } else {
      throw new IllegalArgumentException("PMatrix2D.set() only accepts PMatrix2D objects.");
    }
  }

  /**
   * Unavailable in


Type {
	case proto.EndpointType_WorkloadEndpoint:
		fl.DstMeta.Type = endpoint.Wep
	case proto.EndpointType_HostEndpoint:
		fl.DstMeta.Type = endpoint.Hep
	case proto.EndpointType_NetworkSet:
		fl.DstMeta.Type = endpoint.Ns
	case proto.EndpointType_Network:
		fl.DstMeta.Type = endpoint.Net
	default:
		panic(fmt.Sprintf("Unexpected destination type: %v", gl.Key.DestType))
	}

	fl.DstService = flowlog.FlowService{
		Namespace: gl.Key.DestServiceNamespace,
		Name:      gl.Key.DestServiceName,
		PortName:  gl.Key.DestServicePortName,
		PortNum:   int(gl.Key.DestServicePort),
	}
	fl.Tuple = tuple.Tuple{
		Proto: utils.StringToProto(gl.Key.Proto),
		L4Dst: int(gl.Key.DestPort),
	}

	switch gl.Key.Reporter {
	case proto.Reporter_Src:
		fl.Reporter = flowlog.ReporterSrc
	case proto.Reporter_Dst:
		fl.Reporter = flowlog.ReporterDst
	default:
		panic(fmt.Sprintf("Unexpected reporter: %v", gl.Key.Reporter))
	}

	switch gl.Key.Action {
	case proto.Action_Allow:
		fl.Action = flowlog.ActionAllow
	case proto.Action_Deny:
		fl.Action = flowlog.ActionDeny
	default:
		panic(fmt.Sprintf("Unexpected action: %v", gl.Key.Action))
	}
	return fl
}

// toPolicyHits converts a FlowPolicySet to a slice of policy hits in Goldmane protobuf format.
func toPolicyHits(labels flowlog.FlowPolicySet) []*proto.PolicyHit {
	var hits []*proto.PolicyHit
	for p := range labels {
		h, err := proto.HitFromString(p)
		if err != nil {
			logrus.WithError(err).WithField("label", p).Panic("Failed to parse policy hit")
		}
		hits = append(hits, h)
	}
	return hits
}

// toFlowPolicySet converts a slice of policy hits in Goldmane protobuf format to a FlowPolicySet.
func toFlowPolicySet(policies []*proto.PolicyHit) flowlog.FlowPolicySet {
	if policies == nil {
		return nil
	}

	policySet := make(flowlog.FlowPolicySet)
	for _, pol := range policies {
		if s, err := pol.ToString(); err != nil {
			logrus.WithError(err).WithField("policy", pol).Error("Failed to convert policy hit to string")
		} else {
			policySet[s] = struct{}{}
		}
	}
	return policySet
}

func ensureLabels(labels uniquelabels.Map) unique.Handle[string] {
	if labels.IsNil() {
		return unique.Make("")
	}
	flat := utils.FlattenLabels(labels.RecomputeOriginalMap())
	sort.Strings(flat)
	return unique.Make(strings.Join(flat, ","))
}

func ensureFlowLogLabels(lables []string) uniquelabels.Map {
	if lables == nil {
		return uniquelabels.Empty
	}
	return uniquelabels.Make(utils.UnflattenLabels(lables))
}
// Copyright (c) 2018-2025 Tigera, Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License f


--[[
+----------------------------------------------------------------------------------------------------------------------+
| Snakes fear fire and will retreat from open flames, suffering a -1 morale modifier when flames are used against them |
+----------------------------------------------------------------------------------------------------------------------+
--]]

function %INNATE_SNAKE_RETREAT_FROM_OPEN_FLAMES%(op403CGameEffect, CGameEffect, CGameSprite)
	local dmgtype = GT_Resource_SymbolToIDS["dmgtype"]
	--
	local spriteActiveStats = EEex_Sprite_GetActiveStats(CGameSprite)
	--
	--local immunityToDamage = EEex_Trigger_ParseConditionalString("EEex_IsImmuneToOpcode(Myself,12)")
	--
	if CGameEffect.m_effectId == 0xC and EEex_IsMaskSet(CGameEffect.m_dWFlags, dmgtype["FIRE"]) then -- Damage (FIRE)
		if spriteActiveStats.m_nResistFire < 100 then -- only apply if the target is not immune to fire
			-- op403 "sees" effects after they have passed their probability roll, but before any saving throws have been made against said effect / other immunity mechanisms have taken place
			-- opcodes applied here *should* use the same roll for saves and mr checks...
			-- moreover, the morale modifier penalty *should* not be bounced back...
			if not GT_Sprite_HasBounceEffects(CGameSprite, CGameEffect.m_spellLevel, CGameEffect.m_projectileType, CGameEffect.m_school, CGameEffect.m_secondaryType, CGameEffect.m_sourceRes:get(), {12, 23, 146, 24}, CGameEffect.m_flags, false) then
				if not GT_Sprite_HasImmunityEffects(CGameSprite, CGameEffec


google.api.expr.v1alpha1.CheckedExpr.TypeMapEntry',
      '10': 'typeMap'
    },
    {
      '1': 'source_info',
      '3': 5,
      '4': 1,
      '5': 11,
      '6': '.google.api.expr.v1alpha1.SourceInfo',
      '10': 'sourceInfo'
    },
    {'1': 'expr_version', '3': 6, '4': 1, '5': 9, '10': 'exprVersion'},
    {
      '1': 'expr',
      '3': 4,
      '4': 1,
      '5': 11,
      '6': '.google.api.expr.v1alpha1.Expr',
      '10': 'expr'
    },
  ],
  '3': [CheckedExpr_ReferenceMapEntry$json, CheckedExpr_TypeMapEntry$json],
};

@$core.Deprecated('Use checkedExprDescriptor instead')
const CheckedExpr_ReferenceMapEntry$json = {
  '1': 'ReferenceMapEntry',
  '2': [
    {'1': 'key', '3': 1, '4': 1, '5': 3, '10': 'key'},
    {
      '1': 'value',
      '3': 2,
      '4': 1,
      '5': 11,
      '6': '.google.api.expr.v1alpha1.Reference',
      '10': 'value'
    },
  ],
  '7': {'7': true},
};

@$core.Deprecated('Use checkedExprDescriptor instead')
const CheckedExpr_TypeMapEntry$json = {
  '1': 'TypeMapEntry',
  '2': [
    {'1': 'key', '3': 1, '4': 1, '5': 3, '10': 'key'},
    {
      '1': 'value',
      '3': 2,
      '4': 1,
      '5': 11,
      '6': '.google.api.expr.v1alpha1.Type',
      '10': 'value'
    },
  ],
  '7': {'7': true},
};

/// Descriptor for `CheckedExpr`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List checkedExprDescriptor = $convert.base64Decode(
    'CgtDaGVja2VkRXhwchJcCg1yZWZlcmVuY2VfbWFwGAIgAygLMjcuZ29vZ2xlLmFwaS5leHByLn'
    'YxYWxwaGExLkNoZWNrZWRFeHByLlJlZmVyZW5jZU1hcEVudHJ5UgxyZWZlcmVuY2VNYXASTQoI'
    'dHlwZV9tYXAYAyADKAsyMi5nb29nbGUuYXBpLmV4cHIudjFhbHBoYTEuQ2hlY2tlZEV4cHIuVH'
    'lwZU1hcEVudHJ5Ugd0eXBlTWFwEkUKC3NvdXJjZV9pbmZvGAUgASgLMiQuZ29vZ2xlLmFwaS5l'
    'eHByLnYxYWxwaGExLlNvdXJjZUluZm9SCnNvdXJjZUluZm8SIQoMZXhwcl92ZXJzaW9uGAYgAS'
    'gJUgtleHByVmVyc2lvbhIyCgRleHByGAQgASgLMh4uZ29vZ2xlLmFwaS5leHByLnYxYWxwaGEx'
    'LkV4cHJSBGV4cHIaZAoRUmVmZXJlbmNlTWFwRW50cnkSEAoDa2V5GAEgASgDUgNrZXkSOQoFdm'
    'FsdWUYAiABKAsyIy5nb29nbGUuYXBpLmV4cHIudjFhbHBoYTEuUmVmZXJlbmNlUgV2YWx1ZToC'
    'OAEaWgoMVHlwZU1hcEVudHJ5EhAKA2tleRgBI


u0254nd\u025b",
      "s\u0254\u014b\u025b",
      "di\u0253\u00e1\u0253\u00e1",
      "emiasele",
      "es\u0254p\u025bs\u0254p\u025b",
      "madi\u0253\u025b\u0301d\u00ed\u0253\u025b\u0301",
      "di\u014bgindi",
      "ny\u025bt\u025bki",
      "may\u00e9s\u025b\u0301",
      "tin\u00edn\u00ed",
      "el\u00e1\u014bg\u025b\u0301"
    ],
    "SHORTDAY": [
      "\u00e9t",
      "m\u0254\u0301s",
      "kwa",
      "muk",
      "\u014bgi",
      "\u0257\u00f3n",
      "esa"
    ],
    "SHORTMONTH": [
      "di",
      "\u014bg\u0254n",
      "s\u0254\u014b",
      "di\u0253",
      "emi",
      "es\u0254",
      "mad",
      "di\u014b",
      "ny\u025bt",
      "may",
      "tin",
      "el\u00e1"
    ],
    "WEEKENDRANGE": [
      5,
      6
    ],
    "fullDate": "EEEE d MMMM y",
    "longDate": "d MMMM y",
    "medium": "d MMM y HH:mm:ss",
    "mediumDate": "d MMM y",
    "mediumTime": "HH:mm:ss",
    "short": "d/M/y HH:mm",
    "shortDate": "d/M/y",
    "shortTime": "HH:mm"
  },
  "NUMBER_FORMATS": {
    "CURRENCY_SYM": "FCFA",
    "DECIMAL_SEP": ",",
    "GROUP_SEP": "\u00a0",
    "PATTERNS": [
      {
        "gSize": 3,
        "lgSize": 3,
        "maxFrac": 3,
        "minFrac": 0,
        "minInt": 1,
        "negPre": "-",
        "negSuf": "",
        "posPre": "",
        "posSuf": ""
      },
      {
        "gSize": 3,
        "lgSize": 3,
        "maxFrac": 2,
        "minFrac": 2,
        "minInt": 1,
        "negPre": "-",
        "negSuf": "\u00a0\u00a4",
        "posPre": "",
        "posSuf": "\u00a0\u00a4"
      }
    ]
  },
  "id": "dua-cm",
  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
});
}]);
'use strict';
angular.module("ngLocale", [], ["$provide", function($provide) {
var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
function getDecimals(n) {
  n = n + '';
  var i = n.indexOf('.');
  return (i == -1) ? 0 : n.length - i - 1;
}

function getVF(n, opt_precision) {
  var v = opt_precision;

  if (undefined === v) {
    v = Math.min(getDecimals(n), 3);
  }

  var base = Math.pow(10, v);
  var f = ((n * base) | 0) % base;
  return {v: v, f: f};
}

$provide


]
	mov     r0, r6
	mov     r1, r4
	mov     r2, #0x3
	bl      Function_222fe5c
	b       branch_222f400
@ 0x222f198

.thumb
branch_222f198: @ 222f198 :thumb
	mov     r0, #0x17
	strb    r0, [r4, #0x4]
	b       branch_222f400
@ 0x222f19e

.thumb
branch_222f19e: @ 222f19e :thumb
	mov     r0, #0x5
	strb    r0, [r4, #0x4]
	b       branch_222f400
@ 0x222f1a4

.thumb
branch_222f1a4: @ 222f1a4 :thumb
	bl      Function_222f8f8
	mov     r0, #0x4
	strb    r0, [r4, #0x4]
	b       branch_222f400
@ 0x222f1ae

.thumb
branch_222f1ae: @ 222f1ae :thumb
	bl      Function_222f948
	cmp     r0, #0x1
	beq     branch_222f1b8
.thumb
branch_222f1b6: @ 222f1b6 :thumb
	b       branch_222f400
@ 0x222f1b8

.thumb
branch_222f1b8: @ 222f1b8 :thumb
	mov     r0, #0x2
	strb    r0, [r4, #0x4]
	b       branch_222f400
@ 0x222f1be

.thumb
branch_222f1be: @ 222f1be :thumb
	bl      Function_222ff38
	mov     r1, r0
	mov     r0, r4
	bl      Function_222e160
	ldr     r2, [sp, #0xc]
	mov     r0, r6
	mov     r1, r4
	mov     r3, r7
	bl      Function_222fa70
	mov     r0, #0x6
	strb    r0, [r4, #0x4]
	b       branch_222f400
@ 0x222f1dc

.thumb
branch_222f1dc: @ 222f1dc :thumb
	bl      Function_222fb24
	strb    r0, [r4, #0x4]
	b       branch_222f400
@ 0x222f1e4

.thumb
branch_222f1e4: @ 222f1e4 :thumb
	mov     r0, #0x41
	mov     r1, #0x4
	lsl     r0, r0, #2
	str     r1, [r6, r0]
	mov     r0, #0x8
	strb    r0, [r4, #0x4]
	b       branch_222f400
@ 0x222f1f2

.thumb
branch_222f1f2: @ 222f1f2 :thumb
	mov     r3, #0x41
	lsl     r3, r3, #2
	ldr     r5, [r6, r3]
	.hword  0x1e6d @ sub r5, r5, #0x1
	str     r5, [r6, r3]
	ldr     r3, [r6, r3]
	cmp     r3, #0x0
	bgt     branch_222f2f4
	bl      Function_222f6e8
	mov     r0, r4
	mov     r1, #0x4
	mov     r2, #0x0
	bl      Function_222e074
	add     sp, #0x18
	mov     r0, #0x1
	pop     {r3-r7,pc}
@ 0x222f216

.thumb
branch_222f216: @ 22


eforeSuppression.isNotEmpty())

        val hasPascalCaseWarning = diagnosticsBeforeSuppression.any { diag ->
            diag.toString().contains("PascalCase")
        }
        assertTrue("Should have PascalCase warning", hasPascalCaseWarning)

        // Suppress MTLOG004 (PascalCase)
        state.suppressedDiagnostics = mutableListOf("MTLOG004")
        service.restartProcesses()

        // Run analyzer again - should not have PascalCase warning
        val diagnosticsAfterSuppression = runRealAnalyzer()
        val stillHasPascalCaseWarning = diagnosticsAfterSuppression.any { diag ->
            diag.toString().contains("PascalCase")
        }
        assertFalse("Should not have PascalCase warning after suppression", stillHasPascalCaseWarning)

        // Unsuppress MTLOG004
        state.suppressedDiagnostics = mutableListOf()
        service.restartProcesses()

        // Run analyzer again - should have PascalCase warning again
        val diagnosticsAfterUnsuppression = runRealAnalyzer()
        val hasPascalCaseWarningAgain = diagnosticsAfterUnsuppression.any { diag ->
            diag.toString().contains("PascalCase")
        }
        assertTrue("Should have PascalCase warning after unsuppression", hasPascalCaseWarningAgain)
    }

    // Helper function to extract diagnostic ID (mimics the real implementation)
    private fun extractDiagnosticIdFromMessage(message: String): String? {
        // First try to extract from [MTLOG00X] format
        val idMatch = Regex("\\[(MTLOG\\d{3})\\]").find(message)
        if (idMatch != null) {
            return idMatch.groupValues[1]
        }

        // Otherwise, determine from message content
        val msgLower = message.lowercase()
        return when {
            msgLower.contains("template has") && msgLower.contains("properties") && msgLower.contains("arguments") -> "MTLOG001"
            msgLower.contains("invalid format specifier") -> "MTLOG002"
            msgLower.contains("duplicate property") -> "MTLOG003"
            msgLower.contains("pascalcase") -> "MTLOG004"
            msgLower.contains("capturing") || msgLower.contains("@ prefix") || msgLower.contains("$ prefix") -> "MTLOG005"
            msgLower.contains("error level log without error") || msgLower.contains("error logging without error") -> "MTLOG006"
            msgLower.contains("context key") -> "MTLOG007"
            msgLower.contains("dynamic template") -> "MTLOG008"
            else -> null
        }
    }
}package com.will.weiyuekotlin.widget

import android.content.Context
import android.support.v4.content.ContextCompat
import android.support.v7.widget.GridLayoutManager
import android.support.v7.widget.RecyclerView
import android.view.View
import android.widget.ImageView
import android.widget.TextView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.chad.library.adapter.base.listener.OnItemClickListener
import com.flyco.dialog.widget.popup.base.BasePopup
import com.will.weiyuekotlin.R
import java.util.*

/**
 * desc: .
 * author: Will .
 * date: 2017/9/12 .
 */
class NewsDelPop(context: Context) : BasePopup<NewsDelPop>(context) {

    private lateinit var recyclerView: RecyclerView
    private lateinit var tvNoLike: TextView
    private lateinit var ivTop: ImageView
    private lateinit var ivDown: ImageView
    private lateinit var backReason: List<String>
    private lateinit var selectId: MutableList<Int>
    private lateinit var adapter: BaseQuickAdapter<String, BaseViewHolder>

    private var position: Int = 0
    private var mOnClickListener: OnClickListener? = null

    fun setOnClickListener(onClickListener: OnClickListener) {
        mOnClickListener = onClickListener
    }

    interface OnClickListener {
        fun onClick(position: Int)
    }

    fun setBackReason(backReason: List<String>, isTop: Boolean, position: Int): NewsDelPop {
        this.backReason = backReason
        this.position = position
        selectId =


 of ListStream.
func (mr *MockBigQueryTableClientMockRecorder) ListStream(ctx, projectID, datasetID, stream, toSDPItem any) *gomock.Call {
	mr.mock.ctrl.T.Helper()
	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListStream", reflect.TypeOf((*MockBigQueryTableClient)(nil).ListStream), ctx, projectID, datasetID, stream, toSDPItem)
}

// MockBigQueryModelClient is a mock of BigQueryModelClient interface.
type MockBigQueryModelClient struct {
	ctrl     *gomock.Controller
	recorder *MockBigQueryModelClientMockRecorder
	isgomock struct{}
}

// MockBigQueryModelClientMockRecorder is the mock recorder for MockBigQueryModelClient.
type MockBigQueryModelClientMockRecorder struct {
	mock *MockBigQueryModelClient
}

// NewMockBigQueryModelClient creates a new mock instance.
func NewMockBigQueryModelClient(ctrl *gomock.Controller) *MockBigQueryModelClient {
	mock := &MockBigQueryModelClient{ctrl: ctrl}
	mock.recorder = &MockBigQueryModelClientMockRecorder{mock}
	return mock
}

// EXPECT returns an object that allows the caller to indicate expected use.
func (m *MockBigQueryModelClient) EXPECT() *MockBigQueryModelClientMockRecorder {
	return m.recorder
}

// Get mocks base method.
func (m *MockBigQueryModelClient) Get(ctx context.Context, projectID, datasetID, modelID string) (*bigquery.ModelMetadata, error) {
	m.ctrl.T.Helper()
	ret := m.ctrl.Call(m, "Get", ctx, projectID, datasetID, modelID)
	ret0, _ := ret[0].(*bigquery.ModelMetadata)
	ret1, _ := ret[1].(error)
	return ret0, ret1
}

// Get indicates an expected call of Get.
func (mr *MockBigQueryModelClientMockRecorder) Get(ctx, projectID, datasetID, modelID any) *gomock.Call {
	mr.mock.ctrl.T.Helper()
	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Get", reflect.TypeOf((*MockBigQueryModelClient)(nil).Get), ctx, projectID, datasetID, modelID)
}

// List mocks base method.
func (m *MockBigQueryModelClient) List(ctx context.Context, projectID, datasetID string, toSDPItem func(string, *bigquery.ModelMetadata) (*sdp.Item, *sdp.QueryError)) ([]*sdp.Item, *sdp.QueryError) {
	m.ctrl.T.Helper()
	ret := m.ctrl.Call(m, "List", ctx, projectID, datasetID, toSDPItem)
	ret0, _ := ret[0].([]*sdp.Item)
	ret1, _ := ret[1].(*sdp.QueryError)
	return ret0, ret1
}

// List indicates an expected call of List.
func (mr *MockBigQueryModelClientMockRecorder) List(ctx, projectID, datasetID, toSDPItem any) *gomock.Call {
	mr.mock.ctrl.T.Helper()
	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "List", reflect.TypeOf((*MockBigQueryModelClient)(nil).List), ctx, projectID, datasetID, toSDPItem)
}

// ListStream mocks base method.
func (m *MockBigQueryModelClient) ListStream(ctx context.Context, projectID, datasetID string, stream discovery.QueryResultStream, toSDPItem func(string, *bigquery.ModelMetadata) (*sdp.Item, *sdp.QueryError)) {
	m.ctrl.T.Helper()
	m.ctrl.Call(m, "ListStream", ctx, projectID, datasetID, stream, toSDPItem)
}

// ListStream indicates an expected call of ListStream.
func (mr *MockBigQueryModelClientMockRecorder) ListStream(ctx, project


 0;
    var colorLocation = 1;

    var program = wtu.setupSimpleVertexColorProgram(gl, positionLocation, colorLocation);

    function setupQuad(s, colorsInArray) {
        var vertexObject = gl.createBuffer();
        gl.bindBuffer(gl.ARRAY_BUFFER, vertexObject);
        gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
             1.0 * s,  1.0 * s, 0.0,
            -1.0 * s,  1.0 * s, 0.0,
            -1.0 * s, -1.0 * s, 0.0,
             1.0 * s,  1.0 * s, 0.0,
            -1.0 * s, -1.0 * s, 0.0,
             1.0 * s, -1.0 * s, 0.0]), gl.STATIC_DRAW);
        gl.enableVertexAttribArray(positionLocation);
        gl.vertexAttribPointer(positionLocation, 3, gl.FLOAT, false, 0, 0);

        // Test switching between VAOs that have different number of enabled arrays
        if (colorsInArray) {
            var vertexObject = gl.createBuffer();
            gl.bindBuffer(gl.ARRAY_BUFFER, vertexObject);
            gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
                0.0, 0.0, 0.0, 1.0,
                0.0, 0.0, 0.0, 1.0,
                0.0, 0.0, 0.0, 1.0,
                0.0, 0.0, 0.0, 1.0,
                0.0, 0.0, 0.0, 1.0,
                0.0, 0.0, 0.0, 1.0]), gl.STATIC_DRAW);
            gl.enableVertexAttribArray(colorLocation);
            gl.vertexAttribPointer(colorLocation, 4, gl.FLOAT, false, 0, 0);
        } else {
            gl.disableVertexAttribArray(colorLocation);
        }
    };

    function verifyDiagonalPixels(s, expectedInside, drawDescription) {
        // Tests pixels along a diagonal running from the center of the canvas to the (0, 0) corner.
        // Values on the points list indicate relative position along this diagonal.
        var points = [0.0, 0.2, 0.4, 0.6, 0.8, 1.0];
        for (var n = 0; n < points.length; n++) {
            var expected = points[n] <= s ? expectedInside : 255;
            var x = Math.round((1 - points[n]) * canvas.width / 2);
            var y = Math.round((1 - points[n]) * canvas.height / 2);
            wtu.checkCanvasRect(gl, x, y, 1, 1, [expected, expected, expected, 255],
                "Drawing " + drawDescription + " should pass", 2);
        }
    };
    function verifyDraw(drawDescription, s, colorsInArray) {
        wtu.clearAndDrawUnitQuad(gl);
        var expectedInside = colorsInArray ? 0 : 128;
        verifyDiagonalPixels(s, expectedInside, drawDescription);
    };

    // Setup all bindings
    setupQuad(1, true);
    ext.bindVertexArrayOES(vao0);
    setupQuad(0.5, true);
    ext.bindVertexArrayOES(vao1);
    setupQuad(0.25, true);
    ext.bindVertexArrayOES(vao2);
    setupQuad(0.75, false);

    gl.vertexAttrib4f(colorLocation, 0.5, 0.5, 0.5, 1);

    // Verify drawing
    ext.bindVertexArrayOES(null);
    verifyDraw("with the default VAO", 1, true);
    ext.bindVertexArrayOES(vao0);
    verifyDraw("with VAO #0", 0.5, true);
    ext.bindVertexArrayOES(vao1);
    verifyDraw("with VAO #1", 0.25, true);
    ext.bindVertexArrayOES(vao2);
    verifyDraw("with VAO that has the c


er): void {
    this.manager = manager;
  }

  abstract updateFrame(deltaTime: number): void;
}

export default Engine;const data = {
  heroes: [
    {
      id: '10',
      name: 'Ella',
      description: 'fashionista'
    },
    {
      id: '20',
      name: 'Madelyn',
      description: 'the cat whisperer'
    },
    {
      id: '30',
      name: 'Haley',
      description: 'pen wielder'
    },
    {
      id: '40',
      name: 'Landon',
      description: 'arc trooper'
    }
  ],
  villains: [
    {
      id: '10',
      name: 'Malcolm',
      description: `I don't believe there is a power in the verse that can stop Kaylee from being cheerful.`
    },
    {
      id: '20',
      name: 'Kaylee',
      description: `No power in the 'verse can stop me.`
    },
    {
      id: '30',
      name: 'Hoban',
      description: `I don't mean to alarm anybody, but I think we're being followed.`
    },
    {
      id: '40',
      name: 'Zoë',
      description: `First rule of battle, little one ... don't ever let them know where you are.`
    },
    {
      id: '50',
      name: 'Inara',
      description: `It wasn't entirely a disaster`
    },
    {
      id: '60',
      name: 'Simon',
      description: 'This must be what going mad feels like.'
    },
    {
      id: '70',
      name: 'Shepherd',
      description: 'Oh, I got heathens aplenty right here.'
    },
    {
      id: '80',
      name: 'River',
      description: 'Call me if anyone interesting shows up'
    },
    {
      id: '90',
      name: 'Jayne',
      description: `Ten percent of nothin' is ... let me do the math here ... nothin' into nothin' ... carry the nothin'`
    }
  ]
};

const addHero = hero => {
  hero.id = `Hero${hero.name}`;
  data.heroes.push(hero);
  return hero;
};

const updateHero = hero => {
  const index = data.heroes.findIndex(h => h.id === hero.id);
  data.heroes.splice(index, 1, hero);
  return hero;
};

const deleteHero = id => {
  data.heroes = data.heroes.filter(h => h.id !== id);
  return true;
};

const getHeroes = () => {
  return data.heroes;
};

const addVillain = villain => {
  villain.id = `Villain${villain.name}`;
  return data.villains.push(villain);
  return villain;
};

const updateVillain = villain => {
  const index = data.villains.findIndex(h => h.id === villain.id);
  data.villains.splice(index, 1, villain);
  return villain;
};

const deleteVillain = id => {
  data.villains = data.villains.filter(h => h.id !== id);
  return true;
};

const getVillains = () => {
  return data.villains;
};

export {
  addHero,
  updateHero,
  deleteHero,
  getHeroes,
  addVillain,
  updateVillain,
  deleteVillain,
  getVillains
};
import { BaseAnalyzer } from '../../base'
import { ResourceAnalysisResult, SeverityStatus, CheckAnalysisResult, CheckAnalysisType } from '../../../types';

export class BucketAnalyticsAnalyzer extends BaseAnalyzer {

    analyze(params: any): any {
        const allBucketAnalyticsConfig = params.bucket_analytics;
        if (!allBucketAnalyticsConfig) {
            return undefined;
        }
        const bucket_analytics_enabled: CheckAnalysisResult = { type: CheckAnalysisType.CostOptimization };
        bucket_analytics


emon...")
			if err := manager.StopDaemon(); err != nil {
				return fmt.Errorf("failed to stop daemon: %w", err)
			}
			fmt.Println("✅ Sync daemon stopped successfully!")
			return nil
		},
	})

	// Restart daemon
	cmd.AddCommand(&cobra.Command{
		Use:   "restart",
		Short: "Restart sync daemon",
		Long:  "Restart the CommandChronicles sync daemon",
		RunE: func(cmd *cobra.Command, args []string) error {
			verbose, _ := cmd.Flags().GetBool("verbose")
			noColor, _ := cmd.Flags().GetBool("no-color")

			// Create formatter for colored output
			formatter := output.NewFormatter(cfg)
			formatter.SetFlags(verbose, false, noColor)

			formatter.Sync("Restarting sync daemon...")
			if err := manager.RestartDaemon(); err != nil {
				return fmt.Errorf("failed to restart daemon: %w", err)
			}
			formatter.Success("Sync daemon restarted successfully!")
			return nil
		},
	})

	// Status
	cmd.AddCommand(&cobra.Command{
		Use:   "status",
		Short: "Show daemon status",
		Long:  "Show detailed status information about the sync daemon",
		RunE: func(cmd *cobra.Command, args []string) error {
			verbose, _ := cmd.Flags().GetBool("verbose")
			noColor, _ := cmd.Flags().GetBool("no-color")

			// Create formatter for colored output
			formatter := output.NewFormatter(cfg)
			formatter.SetFlags(verbose, false, noColor)

			status, err := manager.GetStatus()
			if err != nil {
				return fmt.Errorf("failed to get daemon status: %w", err)
			}

			formatter.Stats("CommandChronicles Daemon Status")
			fmt.Printf("================================\n")
			if status.Daemon.Running {
				formatter.Success("Daemon Status: Running")
			} else {
				formatter.Error("Daemon Status: Stopped")
			}

			if status.Daemon.Running {
				fmt.Printf("PID: %d\n", status.Daemon.PID)
				if status.Daemon.Uptime > 0 {
					fmt.Printf("Uptime: %v\n", status.Daemon.Uptime)
				}
			}

			// Show service integration status
			if status.Service.Installed {
				formatter.Success("System Service: Installed (%s)", status.Service.Platform)
				if status.Service.Enabled {
					formatter.Success("Service Enabled: Yes")
				} else {
					formatter.Error("Service Enabled: No")
				}
				if status.Service.Running {
					formatter.Success("Service Running: Yes")
				} else {
					formatter.Error("Service Running: No")
				}
				formatter.Success("Auto-start: On boot")
			} else if status.Config.AutoStart {
				formatter.Error("System Service: Not installed")
				formatter.Success("Auto-start: On command usage")
			} else {
				formatter.Error("System Service: Not installed")
				formatter.Error("Auto-start: Manual start required")
			}

			fmt.Printf("Sync Interval: %v\n", status.Config.SyncInterval)

			return nil
		},
	})

	// Install service
	cmd.AddCommand(&cobra.Command{
		Use:   "install-service",
		Short: "Install system service for automatic startup",
		Long:  "Install a system service (systemd/launchd) for automatic daemon startup on boot",
		RunE: func(cmd *cobra.Command, args []string) error {
			verbose, _ := cmd.Flags().GetBool("verbose")
			noColor, _ := cmd.Flags().GetBool("no-color")

			// Create formatter for colored output
			formatter := output.NewFormatter(cfg)
			formatter.SetFlags(verbose, false, noColor)

			formatter.Setup("Installing s


1.数学类"];
	cs_0702 [label="0702.物理学类"];
	cs_0703 [label="0703.化学类"];
	cs_0704 [label="0704.天文学类"];
	cs_0705 [label="0705.地理科学类"];
	cs_0706 [label="0706.大气科学类"];
	cs_0707 [label="0707.海洋科学类"];
	cs_0708 [label="0708.地球物理学类"];
	cs_0709 [label="0709.地质学类"];
	cs_0710 [label="0710.生物科学类"];
	cs_0711 [label="0711.心理学类"];
	cs_0712 [label="0712.统计学类"];
	cs_0801 [label="0801.力学类"];
	cs_0802 [label="0802.机械类"];
	cs_0803 [label="0803.仪器类"];
	cs_0804 [label="0804.材料类"];
	cs_0805 [label="0805.能源动力类"];
	cs_0806 [label="0806.电气类"];
	cs_0807 [label="0807.电子信息类"];
	cs_0808 [label="0808.自动化类"];
	cs_0809 [label="0809.计算机类"];
	cs_0810 [label="0810.土木类"];
	cs_0811 [label="0811.水利类"];
	cs_0812 [label="0812.测绘类"];
	cs_0813 [label="0813.化工与制药类"];
	cs_0814 [label="0814.地质类"];
	cs_0815 [label="0815.矿业类"];
	cs_0816 [label="0816.纺织类"];
	cs_0817 [label="0817.轻工类"];
	cs_0818 [label="0818.交通运输类"];
	cs_0819 [label="0819.海洋工程类"];
	cs_0820 [label="0820.航空航天类"];
	cs_0821 [label="0821.兵器类"];
	cs_0822 [label="0822.核工程类"];
	cs_0823 [label="0823.农业工程类"];
	cs_0824 [label="0824.林业工程类"];
	cs_0825 [label="0825.环境科学与工程类"];
	cs_0826 [label="0826.生物医学工程类"];
	cs_0827 [label="0827.食品科学与工程类"];
	cs_0828 [label="0828.建筑类"];
	cs_0829 [label="0829.安全科学与工程类"];
	cs_0830 [label="0830.生物工程类"];
	cs_0831 [label="0831.公安技术类"];
	cs_0901 [label="0901.植物生产类"];
	cs_0902 [label="0902.自然保护与环境生态类"];
	cs_0903 [label="0903.动物生产类"];
	cs_0904 [label="0904.动物医学类"];
	cs_0905 [label="0905.林学类"];
	cs_0906 [label="0906.水产类"];
	cs_0907 [label="0907.草学类"];
	cs_1001 [label="1001.基础医学类"];
	cs_1002 [label="1002.临床医学类"];
	cs_100


 HabitSummaryData(
    id: 1,
    uuid: 'hsingle',
    type: HabitType.normal,
    name: 'test_single',
    desc: '',
    colorType: HabitColorType.cc1,
    dailyGoal: 15.0,
    targetDays: 100,
    frequency: HabitFrequency.custom(freq: freq, days: days),
    startDate: crtDate,
    status: HabitStatus.activated,
    sortPostion: 1.0,
    createTime: DateTime.now(),
  );

  for (var i = 0; i < preRecordNum; i++) {
    crtDate = crtDate.addDays(1);
    data.addRecord(HabitSummaryRecord.generate(
      crtDate,
      status: HabitRecordStatus.done,
      value: rng.nextInt(20),
      parentUUID: data.uuid,
    ));
  }

  final Stopwatch stopwatch = Stopwatch();
  data.reCalculateAutoComplateRecords(firstDay: DateTime.monday);
  stopwatch.start();
  final r = data.debugCalcTotalScore(endDate: starDate.addDays(preRecordNum));
  stopwatch.stop();
  debugPrint('run in: ${stopwatch.elapsed.inMilliseconds} ms, r=$r');
}
// ignore: unused_import
import 'package:intl/intl.dart' as intl;
import 'localizations.g.dart';

// ignore_for_file: type=lint

/// The translations for English (`en`).
class L10nEn extends L10n {
  L10nEn([String locale = 'en']) : super(locale);

  @override
  String get localeScriptName => 'English';

  @override
  String get appName => 'Table Habit';

  @override
  String get habitEdit_saveButton_text => 'Save';

  @override
  String get habitEdit_habitName_hintText => 'Habit Name ...';

  @override
  String get habitEdit_colorPicker_title => 'Pick color';

  @override
  String get habitEdit_habitTypeDialog_title => 'Habit type';

  @override
  String get habitEdit_habitType_positiveText => 'Positive';

  @override
  String get habitEdit_habitType_negativeText => 'Negative';

  @override
  String habitEdit_habitDailyGoal_hintText(num number) {
    return 'Daily goal, default $number';
  }

  @override
  String habitEdit_habitDailyGoal_negativeHintText(num number) {
    return 'Minimum daily threshold, default $number';
  }

  @override
  String habitEdit_habitDailyGoal_errorText01(num number) {
    return 'daily goal must > $number';
  }

  @override
  String habitEdit_habitDailyGoal_errorText02(num number) {
    return 'daily goal must ≤ $number';
  }

  @override
  String habitEdit_habitDailyGoal_negativeErrorText01(num number) {
    return 'daily goal must ≥ $number';
  }

  @override
  String habitEdit_habitDailyGoal_negativeErrorText02(num number) {
    return 'daily goal must ≤ $number';
  }

  @override
  String get habitEdit_habitDailyGoalUnit_hintText => 'Daily goal unit';

  @override
  String get habitEdit_habitDailyGoalExtra_hintText => 'Desired maximum daily goal';

  @override
  String habitEdit_habitDailyGoalExtra_errorText(num dailyGoal) {
    return 'invalid value, must be empty or ≥ $dailyGoal';
  }

  @override
  String get habitEdit_habitDailyGoalExtra_negativeHintText => 'Maximum daily limit';

  @override
  String get habitEdit_frequencySelector_title => 'Select frequency';

  @override
  String get habitEdit_habitFreq_daily => 'Daily';

  @override
  String get habitEdit_habitFreq_perweek => '';

  @override
  String get habitEdit_habitFreq_


bo dolnou šípkou. Presunte sa k predchádzajúcej možnosti s SHIFT+TAB alebo hornou šípkou. Stlačte medzerník alebo ENTER pre výber možnosti menu. Otvorte pod-menu danej možnosti s medzerníkom, alebo ENTER, alebo pravou šípkou. Vráťte sa späť do položky rodičovského menu s ESC alebo ľavou šípkou. Zatvorte kontextové menu s ESC.'
		},

			{
			name: 'Editorov box zoznamu',
			legend: 'V boxe zoznamu, presuňte sa na ďalšiu položku v zozname s TAB alebo dolnou šípkou. Presuňte sa k predchádzajúcej položke v zozname so SHIFT+TAB alebo hornou šípkou. Stlačte medzerník alebo ENTER pre výber možnosti zoznamu. Stlačte ESC pre zatvorenie boxu zoznamu.'
		},

			{
			name: 'Editorove pásmo cesty prvku',
			legend: 'Stlačte ${elementsPathFocus} pre navigovanie na pásmo cesty elementu. Presuňte sa na tlačidlo ďalšieho prvku s TAB alebo pravou šípkou. Presuňte sa k predchádzajúcemu tlačidlu s SHIFT+TAB alebo ľavou šípkou. Stlačte medzerník alebo ENTER pre výber prvku v editore.'
		}
		]
	},
		{
		name: 'Príkazy',
		items: [
			{
			name: 'Vrátiť príkazy',
			legend: 'Stlačte ${undo}'
		},
			{
			name: 'Nanovo vrátiť príkaz',
			legend: 'Stlačte ${redo}'
		},
			{
			name: 'Príkaz na stučnenie',
			legend: 'Stlačte ${bold}'
		},
			{
			name: 'Príkaz na kurzívu',
			legend: 'Stlačte ${italic}'
		},
			{
			name: 'Príkaz na podčiarknutie',
			legend: 'Stlačte ${underline}'
		},
			{
			name: 'Príkaz na odkaz',
			legend: 'Stlačte ${link}'
		},
			{
			name: 'Príkaz na zbalenie lišty nástrojov',
			legend: 'Stlačte ${toolbarCollapse}'
		},
			{
			name: 'Prejsť na predchádzajúcu zamerateľnú medzeru príkazu',
			legend: 'Stlačte ${accessPreviousSpace} pre prístup na najbližšie nedosiahnuteľné zamerateľné medzery pred vsuvkuo. Napríklad: dve za sebou idúce horizontálne čiary. Opakujte kombináciu klávesov pre dosiahnutie vzdialených zamerateľných medzier.'
		},
			{
			name: 'Prejsť na ďalší ',
			legend: 'Stlačte ${accessNextSpace} pre prístup na najbližšie nedosiahnuteľné zamerateľné medzery po vsuvke. Na


0], { encoding: "utf8" })
    .split("DOCHEADER")[1];
  if (!singleRecord) {
    alert("Could not find any records in this file :c");
    selectedFile = "";
    return;
  }

  previewInputData = [];
  const columns = singleRecord.split("\n");
  for (let i = 0; i < columns.length; i++) {
    const rows = columns[i].split("|");
    previewInputData[i] = [];
    for (let j = 0; j < rows.length; j++) {
      previewInputData[i][j] = rows[j];
    }
  }
};

const updateFieldPreview = (newField: HTMLElement, f: Field) => {
  const newFieldPreview = newField.querySelector("#preview") as HTMLSpanElement;
  if (!previewInputData) {
    newFieldPreview.innerHTML = "";
    return;
  }
  const line = previewInputData.find((d, i) => parseInt(d[0]) == f.Column);
  if (!line) {
    newFieldPreview.innerHTML = "";
    return;
  }
  if (!line[f.Row]) {
    newFieldPreview.innerHTML = "";
    return;
  }

  newFieldPreview.innerHTML = formatData(
    line[f.Row],
    f.formatIndex
  );
};

const setupFieldEvents = (newField: HTMLElement, f: Field) => {
  const closeButton = newField.querySelector(
    "#close-button"
  ) as HTMLButtonElement;
  if (closeButton) {
    closeButton.onclick = () => {
      newField.remove();
      fields.slice(fields.indexOf(f));
    };
  }
  const header = newField.querySelector("#header") as HTMLInputElement;
  header.value = f.Heading;
  if (header) {
    header.onchange = () => {
      f.Heading = header.value;
    };
  }

  const column = newField.querySelector("#column") as HTMLInputElement;
  column.value = f.Column.toString();
  if (column) {
    column.oninput = () => {
      if (
        column.value == null ||
        column.value == undefined ||
        Number.parseInt(column.value) < 0
      ) {
        f.Column = 0;
        return;
      }
      f.Column = Number.parseInt(column.value);
      updateFieldPreview(newField, f);
    };
  }

  const row = newField.querySelector("#row") as HTMLInputElement;
  row.value = f.Row.toString();
  if (row) {
    row.oninput = () => {
      if (
        row.value == null ||
        row.value == undefined ||
        Number.parseInt(row.value) < 0
      ) {
        f.Row = 0;
        return;
      }
      f.Row = Number.parseInt(row.value);
      updateFieldPreview(newField, f);
    };
  }

  const select = newField.querySelector("#format") as HTMLSelectElement;
  select.selectedIndex = f.formatIndex;
  select.onchange = () => {
    f.formatIndex = select.selectedIndex;
    updateFieldPreview(newField, f);
  };
};

namespace Services.Base {

    export interface IMessage {
        type: string;
        message: string;
        stackTrace?: string;
        errorUrl?: string;
    }

    export interface ILogger {
        Log(message: string): void;
        LogLevel: LogLevel;
    }

    export enum LogLevel {
        OFF = 0,
        FATAL = 1,
        ERROR = 2,
        WARN = 3,
        INFO = 4,
        DEBUG = 5,
        ALL = 6
    }
    export class BaseLogger {

        private logLevel: LogLevel;

        constructor(logLevel: LogLevel) {
            this.LogLevel = logLevel;
        }

        get LogLevel() {
            return this.logLevel;
        }

        set LogLevel(logLevel) {
            if (this.logLevel != logLevel) {


};
    use winapi::shared::basetsd::LONG_PTR;
    use winapi::shared::minwindef::{BOOL, DWORD};
    use winapi::shared::windef::HWND;
    use winapi::um::dwmapi::*;
    use winapi::um::winuser::*;

    if let RawWindowHandle::Win32(Win32Handle { hwnd, .. }) = window.raw_window_handle() {
        let hwnd = hwnd as HWND;
        ShowWindow(hwnd, SW_HIDE);

        let mut ex_style = GetWindowLongPtrW(hwnd, GWL_EXSTYLE);
        ex_style |= WS_EX_TOOLWINDOW as LONG_PTR;
        ex_style |= (WS_EX_LAYERED | WS_EX_TRANSPARENT) as LONG_PTR;
        ex_style &= !WS_EX_APPWINDOW as LONG_PTR;
        ex_style &= !WS_EX_ACCEPTFILES as LONG_PTR;
        SetWindowLongPtrW(hwnd, GWL_EXSTYLE, ex_style);
        SetLayeredWindowAttributes(hwnd, 0, 255, LWA_ALPHA);

        const YES: BOOL = true as BOOL;
        DwmSetWindowAttribute(
            hwnd,
            DWMWA_EXCLUDED_FROM_PEEK,
            &YES as *const _ as *const c_void,
            std::mem::size_of::<BOOL>() as DWORD,
        );

        ShowWindow(hwnd, SW_SHOW);
        SetFocus(std::ptr::null_mut());
    } else {
        error!("Couldn't get raw window handle, things will probably look weird!");
    }
}

#[cfg(target_os = "windows")]
fn ensure_show_on_desktop(winit_windows: ResMut<WinitWindows>) {
    use std::ffi::CString;

    use raw_window_handle::{HasRawWindowHandle, RawWindowHandle, Win32Handle};
    use winapi::shared::minwindef::{BOOL, LPARAM};
    use winapi::shared::windef::HWND;
    use winapi::um::winuser::*;

    let primary = winit_windows.get_window(WindowId::primary()).unwrap();
    if let RawWindowHandle::Win32(Win32Handle { hwnd: primary_hwnd, .. }) = primary.raw_window_handle() {
        let primary_hwnd = primary_hwnd as HWND;

        // Enumerate through all top-level windows and see if ours is
        // behind the window that handles the "show desktop" feature.
        // If so, then "show desktop" is currently active and we'll
        // force our window to render above the "show desktop" window.
        // This approximates Rainmeter's "show desktop" behavior but
        // is slightly more efficient since we only have one window.

        let show_desktop = {
            #[derive(Debug, PartialEq, Eq)]
            enum EnumWindowCallbackState {
                Initial,
                FoundWorkerW,
                FoundDolphin,
            }

            struct EnumWindowCallbackLParam {
                state: EnumWindowCallbackState,
                primary_hwnd: HWND,
            }

            unsafe extern "system" fn enum_window_callback(hwnd: HWND, lparam: LPARAM) -> BOOL {
                let lparam = &mut *(lparam as *mut EnumWindowCallbackLParam);
                (match lparam.state {
                    // The "show desktop" window can either be a WorkerW or a Progman
                    // window, but will always have a single child of class SHELLDLL_DefView
                    EnumWindowCallbackState::Initial => {
                        let def_view_class = CString::new("SHELLDLL_DefView").unwrap();
                        let def_view = FindWindowExA(
                            hwnd,
                            std::ptr::null_mut(),
                            def_view_class.as_ptr(),
                            std::ptr::null_mut(),
                        );
                        if !def_view.is_null() {
                            lparam.state = EnumWindowCallbackState::FoundWorkerW;
                        }
                        true
                    }
                    // While "show desktop" is active, all application windows
                    // will have a later z-order than the WorkerW/Progman window,
                    // so we expect EnumWin


1.28 12.8-7.68 12.8-15.36v-99.84c-1.28-8.96-7.68-15.36-15.36-16.64z m-16.64 101.12l-75.52 10.24c-6.4 1.28-11.52 5.12-12.8 11.52-5.12 17.92-11.52 35.84-21.76 51.2-2.56 5.12-2.56 11.52 1.28 16.64l46.08 61.44-51.2 51.2-61.44-46.08c-5.12-3.84-11.52-3.84-16.64-1.28-15.36 8.96-33.28 16.64-51.2 21.76-6.4 1.28-10.24 6.4-11.52 12.8l-10.24 75.52h-72.96l-10.24-75.52c-1.28-6.4-5.12-11.52-11.52-12.8-17.92-5.12-35.84-11.52-51.2-21.76-5.12-2.56-11.52-2.56-16.64 1.28l-61.44 46.08-51.2-51.2 46.08-61.44c3.84-5.12 3.84-11.52 1.28-16.64-8.96-15.36-16.64-33.28-21.76-51.2-1.28-6.4-6.4-10.24-12.8-11.52l-75.52-10.24v-72.96l75.52-10.24c6.4-1.28 11.52-5.12 12.8-11.52 5.12-17.92 11.52-35.84 21.76-51.2 2.56-5.12 2.56-11.52-1.28-16.64l-46.08-61.44 51.2-51.2 61.44 46.08c5.12 3.84 11.52 3.84 16.64 1.28 15.36-8.96 33.28-16.64 51.2-21.76 6.4-1.28 10.24-6.4 11.52-12.8l10.24-75.52h72.96l10.24 75.52c1.28 6.4 5.12 11.52 11.52 12.8 17.92 5.12 35.84 11.52 51.2 21.76 5.12 2.56 11.52 2.56 16.64-1.28l61.44-46.08 51.2 51.2-46.08 62.72c-3.84 5.12-3.84 11.52-1.28 16.64 8.96 15.36 16.64 33.28 21.76 51.2 1.28 6.4 6.4 10.24 12.8 11.52l75.52 10.24v71.68z" fill="#4E85F0" ></path><path d="M512 399.36c-61.44 0-112.64 49.92-112.64 112.64 0 61.44 49.92 112.64 112.64 112.64s112.64-49.92 112.64-112.64c0-61.44-51.2-112.64-112.64-112.64z m0 194.56c-44.8 0-81.92-37.12-81.92-81.92 0-44.8 37.12-81.92 81.92-81.92 44.8 0 81.92 37.12 81.92 81.92 0 44.8-37.12 81.92-81.92 81.92z" fill="#4E85F0" ></path></symbol><symbol id="my-icon-zuixing-83" viewBox="0 0 1024 1024"><path d="M820.48 701.44H203.52c-7.68 0-15.36-6.4-15.36-15.36


-- ROBLOX NOTE: no upstream
local CurrentModule = script.Parent.Parent
local Packages = CurrentModule.Parent

local LuauPolyfill = require(Packages.LuauPolyfill)
local setTimeout = LuauPolyfill.setTimeout
local setInterval = LuauPolyfill.setInterval

local JestGlobals = require(Packages.Dev.JestGlobals)
local expect = JestGlobals.expect
local beforeEach = JestGlobals.beforeEach
local afterEach = JestGlobals.afterEach
local describe = JestGlobals.describe
local test = JestGlobals.test
local jest = JestGlobals.jest
local FRAME_TIME = 15

describe("setTimeout", function()
	beforeEach(function()
		jest.useFakeTimers()
	end)

	afterEach(function()
		jest.useRealTimers()
	end)

	test("should not trigger", function()
		local triggered = false
		setTimeout(function()
			triggered = true
		end, 200)
		jest.advanceTimersByTime(199)
		expect(triggered).toBe(false)
	end)

	test("should trigger", function()
		local triggered = false
		setTimeout(function()
			triggered = true
		end, 200)
		jest.advanceTimersByTime(200)
		expect(triggered).toBe(true)
	end)

	test("should trigger with a configurable frame time", function()
		jest.useFakeTimers()
		jest.setEngineFrameTime(FRAME_TIME)
		local triggered = false
		setTimeout(function()
			triggered = true
		end, 10)
		jest.advanceTimersByTime(0)
		expect(triggered).toBe(true)
	end)
end)

describe("setInterval", function()
	beforeEach(function()
		jest.useFakeTimers()
	end)

	afterEach(function()
		jest.useRealTimers()
	end)

	test("should not trigger", function()
		local triggered = 0
		setInterval(function()
			triggered += 1
		end, 200)
		jest.advanceTimersByTime(199)
		expect(triggered).toBe(0)
	end)

	test("should trigger once", function()
		local triggered = 0
		setInterval(function()
			triggered += 1
		end, 200)
		jest.advanceTimersByTime(200)
		expect(triggered).toBe(1)
	end)

	test("should trigger multiple times", function()
		local triggered = 0
		setInterval(function()
			triggered += 1
		end, 200)
		jest.advanceTimersByTime(100)
		expect(triggered).toBe(0)

		jest.advanceTimersByTime(99)
		expect(triggered).toBe(0)

		jest.advanceTimersByTime(1)
		expect(triggered).toBe(1)

		jest.advanceTimersByTime(100)
		expect(triggered).toBe(1)

		jest.advanceTimersByTime(100)
		expect(triggered).toBe(2)

		jest.advanceTimersByTime(199)
		expect(triggered).toBe(2)

		jest.advanceTimersByTime(1)
		expect(triggered).toBe(3)
	end)
end)

describe("task.delay", function()
	beforeEach(function()
		jest.useFakeTimers()
	end)

	afterEach(function()
		jest.useRealTimers()
	end)

	test("should trigger", function()
		local triggered = false
		task.delay(2, function()
			triggered = true
		end)
		jest.advanceTimersByTime(2000)
		expect(triggered).toBe(true)
	end)

	test("should not trigger", function()
		local trig


from concurrent import futures
import grpc
import pymongo
import calculator_pb2
import calculator_pb2_grpc
import os

# MongoDB Connection
client = pymongo.MongoClient(os.environ.get("MONGO_URI"))
db = client["calculator_db"]
collection = db["calculations"]

class CalculatorServicer(calculator_pb2_grpc.CalculatorServicer):
    def log_to_db(self, operation, number1, number2, result):
        """Log calculation to MongoDB."""
        collection.insert_one(
            {
                "operation": operation,
                "number1": number1,
                "number2": number2,
                "result": result,
            }
        )

    def Add(self, request, context):
        result = request.number1 + request.number2
        # self.log_to_db("Add", request.number1, request.number2, result)
        return calculator_pb2.CalculationResponse(result=result)

    def Subtract(self, request, context):
        result = request.number1 - request.number2
        self.log_to_db("Subtract", request.number1, request.number2, result)
        return calculator_pb2.CalculationResponse(result=result)

    def Multiply(self, request, context):
        result = request.number1 * request.number2
        self.log_to_db("Multiply", request.number1, request.number2, result)
        return calculator_pb2.CalculationResponse(result=result)

    def Divide(self, request, context):
        if request.number2 == 0:
            context.set_code(grpc.StatusCode.INVALID_ARGUMENT)
            context.set_details("Division by zero is not allowed")
            return calculator_pb2.CalculationResponse()
        result = request.number1 / request.number2
        self.log_to_db("Divide", request.number1, request.number2, result)
        return calculator_pb2.CalculationResponse(result=result)

def server():
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    calculator_pb2_grpc.add_CalculatorServicer_to_server(CalculatorServicer(), server)
    server.add_insecure_port("[::]:50052")
    print("Calculator Server is running on port 50052...")
    server.start()
    server.wait_for_termination()

if __name__ == "__main__":
    server()


8(%esp)
  0x01ebd39b: push   %eax
  0x01ebd39c: push   %ebx
  0x01ebd39d: call   0x55be79d0
  0x01ebd3a2: add    $0x8,%esp
  0x01ebd3a5: movsd  (%esp),%xmm0
  0x01ebd3aa: movsd  0x8(%esp),%xmm1
  0x01ebd3b0: add    $0x10,%esp
  0x01ebd3b3: popf
  0x01ebd3b4: popa
  0x01ebd3b5: pop    %eax
  0x01ebd3b6: mov    %esp,%esi
  0x01ebd3b8: sub    $0x1c,%esp
  0x01ebd3bb: mov    %ecx,0x18(%esp)
  0x01ebd3bf: mov    %edx,0x14(%esp)
  0x01ebd3c3: movss  %xmm0,0x10(%esp)
  0x01ebd3c9: movss  %xmm1,0xc(%esp)
  0x01ebd3cf: mov    0x1c(%esp),%edi
  0x01ebd3d3: mov    %edi,0x8(%esp)
  0x01ebd3d7: mov    0x20(%esp),%edi
  0x01ebd3db: mov    %edi,0x4(%esp)
  0x01ebd3df: mov    0x24(%esp),%edi
  0x01ebd3e3: mov    %edi,(%esp)
  0x01ebd3e6: mov    0x24(%ebx),%ecx
  0x01ebd3e9: push   %eax
  0x01ebd3ea: jmp    *%ecx

AHE@0x018f9dfc: 0xbe600000 i2c: 0x01ebd470 c2i: 0x01ebd529 c2iUV: 0x01ebd508
i2c argument handler #50 for: static (JF)V (276 bytes generated)
c2i argument handler starts at 01EBD529
  0x01ebd470: mov    (%esp),%eax
  ;; verify_i2c {
  0x01ebd473: mov    $0x1dc2940,%edi
  0x01ebd478: cmp    %edi,%eax
  0x01ebd47a: jbe    0x01ebd48d
  0x01ebd480: mov    $0x1ea2940,%edi
  0x01ebd485: cmp    %edi,%eax
  0x01ebd487: jb     0x01ebd4d2
  0x01ebd48d: mov    $0x1dc0340,%edi
  0x01ebd492: cmp    %edi,%eax
  0x01ebd494: jbe    0x01ebd4a7
  0x01ebd49a: mov    $0x1dc2668,%edi
  0x01ebd49f: cmp    %edi,%eax
  0x01ebd4a1: jb     0x01ebd4d2
  0x01ebd4a7: mov    $0x1ead380,%edi
  0x01ebd4ac: cmp    %edi,%eax
  0x01ebd4ae: jbe    0x01ebd4c1
  0x01ebd4b4: mov    $0x1eb2970,%edi
  0x01ebd4b9: cmp    %edi,%eax
  0x01ebd4bb: jb     0x01ebd4d2
  ;; i2c adapter must return to an interpreter frame
  0x01ebd4c1: push   $0x55ce723c
  0x01ebd4c6: call   0x01ebd4cb


                  color: Colors.white,
                ),
                label: Text(
                  isMonth ? selectedMonth : selectedYear,
                  style: TextStyle(fontSize: 15.sp, color: Colors.white),
                ),
              ),
            ),
          ),
          SizedBox(
            width: 50.sp,
            height: 20.sp,
            child: ElevatedButton(
              // 取掉按钮内边距，或者改到自己想要的大小
              style: ElevatedButton.styleFrom(
                // minimumSize: Size.zero,
                padding: EdgeInsets.symmetric(horizontal: 5.sp),
                // tapTargetSize: MaterialTapTargetSize.shrinkWrap,
                // backgroundColor: Colors.lightGreen,
              ),
              onPressed: isMonth
                  ? (isMonthExpendClick
                      ? null
                      : () {
                          setState(() {
                            isMonthExpendClick = !isMonthExpendClick;
                          });
                        })
                  : (isYearExpendClick
                      ? null
                      : () {
                          setState(() {
                            isYearExpendClick = !isYearExpendClick;
                          });
                        }),
              autofocus: true,
              child: const Text("支出"),
            ),
          ),
          SizedBox(width: 10.sp),
          SizedBox(
            width: 50.sp,
            height: 20.sp,
            child: ElevatedButton(
              // 取掉按钮内边距，或者改到自己想要的大小
              style: ElevatedButton.styleFrom(
                // minimumSize: Size.zero,
                padding: EdgeInsets.symmetric(horizontal: 5.sp),
                // tapTargetSize: MaterialTapTargetSize.shrinkWrap,
                // backgroundColor: Colors.lightGreen,
              ),
              onPressed: isMonth
                  ? (!isMonthExpendClick
                      ? null
                      : () {
                          setState(() {
                            isMonthExpendClick = !isMonthExpendClick;
                          });
                        })
                  : (!isYearExpendClick
                      ? null
                      : () {
                          setState(() {
                            isYearExpendClick = !isYearExpendClick;
                          });
                        }),
              child: const Text("收入"),
            ),
          ),
          SizedBox(width: 10.sp),
        ],
      ),
    );
  }

  /// 年度或月度统计行
  buildCountRow(String billType) {
    bool isMonth = billType == "month";

    // 获取支出/收入项次数量字符串
    getCounts(List<BillItem> items, bool isExpend) {
      var counts = items.where((e) => e.itemType == (isExpend ? 1 : 0)).length;
      return "共${isExpend ? '支出' : '收入'} $counts 笔，合计";
    }

    // 获取支出/收入金额总量字符串
    getTotal(List<BillPeriodCount> counts, String date, bool isExpend) {
      if (counts.isEmpty) return "";

      // 2024-06-03 统计记录可能没有对应月份的数据。
      //  比如6月1日查看统计，还没有账单项次记录，最新的只有5月份的
      var temp = counts.where((e) => e.period == date).toList();
      if (temp.isNotEmpty) {
        return "￥${isExpend ? temp.first.expendTotalValue : temp.first.incomeTotalValue}";
      }
      return isExpend ? '暂无支出' : '暂无收入';
    }

    var titleText = isMonth
        ? getCounts(monthBillItems, isMonthExpendClick)
        : getCounts(yearBillItems, isYearExpendClick);

    var textCount = isMonth
        ? getTotal(monthCounts, selectedMonth, isMonthExpendClick)
        : getTotal(yearCounts, selectedYear


x %o4, 32, %o4
add   %l4, 1, %l4

P3211: !DWST [11] (maybe <- 0x830041) (Int)
mov %l4, %l6
sllx %l6, 32, %l6
stx %l6, [%i2 + 64 ]
add   %l4, 1, %l4

P3212: !MEMBAR (Int)
membar #StoreLoad

P3213: !CAS [15] (maybe <- 0x830042) (Int)
add %i3, 192, %l7
lduw [%l7], %l6
mov %l6, %l3
! move %l3(lower) -> %o4(lower)
sllx %l3, 32, %l6
srlx %l6, 32, %l6
or %l6, %o4, %o4
!---- flushing int results buffer----
mov %o0, %o5
mov %o1, %o5
mov %o2, %o5
mov %o3, %o5
mov %o4, %o5
mov %l4, %o0
cas [%l7], %l3, %o0
! move %o0(lower) -> %o0(upper)
sllx %o0, 32, %o0
add   %l4, 1, %l4

P3214: !PREFETCH [9] (Int)
prefetch [%i1 + 512], 1

P3215: !DWLD [2] (Int)
ldx [%i0 + 8], %l6
! move %l6(lower) -> %o0(lower)
sllx %l6, 32, %l7
srlx %l7, 32, %l7
or %l7, %o0, %o0

P3216: !PREFETCH [11] (Int)
prefetch [%i2 + 64], 1

P3217: !DWST [10] (maybe <- 0x830043) (Int)
mov %l4, %l6
sllx %l6, 32, %l6
stx %l6, [%i2 + 32 ]
add   %l4, 1, %l4

P3218: !LD [3] (Int)
lduw [%i0 + 32], %o1
! move %o1(lower) -> %o1(upper)
sllx %o1, 32, %o1

P3219: !PREFETCH [5] (Int)
prefetch [%i1 + 76], 1

P3220: !ST [4] (maybe <- 0x830044) (Int)
stw   %l4, [%i0 + 64 ]
add   %l4, 1, %l4

P3221: !PREFETCH [4] (Int)
prefetch [%i0 + 64], 1

P3222: !PREFETCH [12] (Int)
prefetch [%i3 + 0], 1

P3223: !CAS [5] (maybe <- 0x830045) (Int)
add %i1, 76, %l7
lduw [%l7], %l6
mov %l6, %l3
! move %l3(lower) -> %o1(lower)
sllx %l3, 32, %l6
srlx %l6, 32, %l6
or %l6, %o1, %o1
mov %l4, %o2
cas [%l7], %l3, %o2
! move %o2(lower) -> %o2(upper)
sllx %o2, 32, %o2
add   %l4, 1, %l4

P3224: !REPLACEMENT [7] (Int)
sethi %hi(0x54), %l6
or %l6, %lo(0x54),  %l6
add %i