const _
                as usize } , 8usize , concat ! (
                "Alignment of field: " , stringify ! ( FT_ListNodeRec_ ) ,
                "::" , stringify ! ( next ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const FT_ListNodeRec_ ) ) . data as * const _
                as usize } , 16usize , concat ! (
                "Alignment of field: " , stringify ! ( FT_ListNodeRec_ ) ,
                "::" , stringify ! ( data ) ));
}
impl Clone for FT_ListNodeRec_ {
    fn clone(&self) -> Self { *self }
}
pub type FT_ListNode = *mut FT_ListNodeRec_;
#[repr(C)]
#[derive(Debug, Copy)]
pub struct FT_ListRec_ {
    pub head: FT_ListNode,
    pub tail: FT_ListNode,
}
#[test]
fn bindgen_test_layout_FT_ListRec_() {
    assert_eq!(::std::mem::size_of::<FT_ListRec_>() , 16usize , concat ! (
               "Size of: " , stringify ! ( FT_ListRec_ ) ));
    assert_eq! (::std::mem::align_of::<FT_ListRec_>() , 8usize , concat ! (
                "Alignment of " , stringify ! ( FT_ListRec_ ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const FT_ListRec_ ) ) . head as * const _ as
                usize } , 0usize , concat ! (
                "Alignment of field: " , stringify ! ( FT_ListRec_ ) , "::" ,
                stringify ! ( head ) ));
    assert_eq! (unsafe {
                & ( * ( 0 as * const FT_ListRec_ ) ) . tail as * const _ as
                usize } , 8usize , concat ! (
                "Alignment of field: " , stringify ! ( FT_ListRec_ ) , "::" ,
                stringify ! ( tail ) ));
}
impl Clone for FT_ListRec_ {
    fn clone(&self) -> Self { *self }
}
pub type FT_List = *mut FT_ListRec_;
pub type FT_ListNodeRec = FT_ListNodeRec_;
pub type FT_ListRec = FT_ListRec_;
pub const FT_Mod_Err_Base: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
pub const FT_Mod_Err_Autofit: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
pub const FT_Mod_Err_BDF: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
pub const FT_Mod_Err_Bzip2: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
pub const FT_Mod_Err_Cache: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
pub const FT_Mod_Err_CFF: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
pub const FT_Mod_Err_CID: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
pub const FT_Mod_Err_Gzip: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
pub const FT_Mod_Err_LZW: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
pub const FT_Mod_Err_OTvalid: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
pub const FT_Mod_Err_PCF: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
pub const FT_Mod_Err_PFR: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
pub const FT_Mod_Err_PSaux: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod_Err_Base;
pub const FT_Mod_Err_PShinter: _bindgen_ty_1 = _bindgen_ty_1::FT_Mod


/* Definitions of target machine GNU compiler.  IA-64 version.
   Copyright (C) 1999-2017 Free Software Foundation, Inc.
   Contributed by James E. Wilson <wilson@cygnus.com> and
   		  David Mosberger <davidm@hpl.hp.com>.

This file is part of GCC.

GCC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.

GCC 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 General Public License for more details.

You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3.  If not see
<http://www.gnu.org/licenses/>.  */

/* ??? Look at ABI group documents for list of preprocessor macros and
   other features required for ABI compliance.  */

/* ??? Functions containing a non-local goto target save many registers.  Why?
   See for instance execute/920428-2.c.  */

/* Run-time target specifications */

/* Target CPU builtins.  */
#define TARGET_CPU_CPP_BUILTINS()		\
do {						\
	builtin_assert("cpu=ia64");		\
	builtin_assert("machine=ia64");		\
	builtin_define("__ia64");		\
	builtin_define("__ia64__");		\
	builtin_define("__itanium__");		\
	if (TARGET_BIG_ENDIAN)			\
	  builtin_define("__BIG_ENDIAN__");	\
} while (0)

#ifndef SUBTARGET_EXTRA_SPECS
#define SUBTARGET_EXTRA_SPECS
#endif

#define EXTRA_SPECS \
  { "asm_extra", ASM_EXTRA_SPEC }, \
  SUBTARGET_EXTRA_SPECS

#define CC1_SPEC "%(cc1_cpu) "

#define ASM_EXTRA_SPEC ""

/* Variables which are this size or smaller are put in the sdata/sbss
   sections.  */
extern unsigned int ia64_section_threshold;

/* If the assembler supports thread-local storage, assume that the
   system does as well.  If a particular target system has an
   assembler that supports TLS -- but the rest of the system does not
   support TLS -- that system should explicit define TARGET_HAVE_TLS
   to false in its own configuration file.  */
#if !defined(TARGET_HAVE_TLS) && defined(HAVE_AS_TLS)
#define TARGET_HAVE_TLS true
#endif

#define TARGET_TLS14		(ia64_tls_size == 14)
#define TARGET_TLS22		(ia64_tls_size == 22)
#define TARGET_TLS64		(ia64_tls_size == 64)

#define TARGET_HPUX		0
#define TARGET_HPUX_LD		0

#define TARGET_ABI_OPEN_VMS 0

#ifndef TARGET_ILP32
#define TARGET_ILP32 0
#endif

#ifndef HAVE_AS_LTOFFX_LDXMOV_RELOCS
#define HAVE_AS_LTOFFX_LDXMOV_RELOCS 0
#endif

/* Values for TARGET_INLINE_FLOAT_DIV, TARGET_INLINE_INT_DIV, and
   TARGET_INLINE_SQRT.  */

enum ia64_inline_type
{
  INL_NO = 0,
  INL_MIN_LAT = 1,
  INL_MAX_THR = 2
};

/* Default target_flags if no switches are specified  */

#ifndef TARGET_DEFAULT
#define TARGET_DEFAULT (MASK_DWARF2_ASM)
#endif

#ifndef TARGET_CPU_DEFAULT
#define TARGET_CPU_DEFAULT 0
#endif

/* Driver configuration */

/* A C string constant that tells the GCC driver program options to pass to
   `cc1'.  It can also specify how to translate options you give to GCC into
   options for GCC to pass to the `cc1'.  */

#undef CC1_SPEC
#define CC1_SPEC "%{G*}"

/* A C string constant that tells the GCC driver program options to pass to
   `cc1plus'.  It can also specify how to translate options you give to GCC
   into options for GCC to pass to the `cc1plus'.  */

/* #define CC1PLUS_SPEC "" */

/* Storage Layout */

/* Define this macro to have the value 1 if the most significant bit in a byte
   has the lowest number; otherwise define it to have the value zero.  */

#define BITS_BIG_ENDIAN 0

#define BYTES_BIG_ENDIAN (TARGET_BIG_ENDIAN != 0)

/* Define this macro to have the value 1 if, in a multiword object, the most
   significant word has the lowest number.  */

#define WORDS_BIG_ENDIAN (TARGET_BIG_ENDIAN != 0)

#define UNITS_PER_WORD 8

#define POINTER_SIZE (TARGET_ILP32 ? 32 : 64)

/* A C expression whose value is zero if pointers that need to be extended
   from being `POINTER_SIZE' bits wide to `Pmode' are sign-extended and one if
   they are zero-extended and negative one if there is a ptr_extend operation.

   You need not define this macro if the `POINTER_SIZE' is equal to the width
   of `Pmode'.  */
/* Need this for 32-bit pointers, see hpux.h for setting it.  */
/* #define POINTERS_EXTEND_UNSIGNED */

/* A macro to update MODE and UNSIGNEDP when an object whose type is TYPE and
   which has the specified mode and signedness is t


me ajudar, vá atrás dos Sanguescalpo. Você pode encontrá-los ao norte. Junte as presas deles e me entregue.",
    ["O"] = "Leve 9 Presas de Sanguescalpo para Nimboya no Acampamento Grom\'gol.",
    ["T"] = "A caçada ao Yennikan",
  },
  [582] = {
    ["D"] = "Nós precisamos descobrir se Yennikan está morto.$B$BMate os Caçadores de Cabeças Sanguescalpo e pegue as cabeças encolhidas deles. Você deve juntar muitas, mas muitas cabeças mesmo! E eu vou olhá-las para ter certeza de que a cabeça do Yennikan não é uma delas.$B$BE se o Yennikan foi morto pelos Sanguescalpo, que uma maldição de 600 anos caia sobre o espírito do chefe deles, Gan\'zulah!$B$BVá, $N. Você pode encontrar Caçadores de Cabeças nas ruínas de Zuuldaia e Zul\'Kunda, na costa ao norte.",
    ["O"] = "Leve 20 Cabeças Encolhidas para Nimboya, no Acampamento Grom\'gol.",
    ["T"] = "Caçando cabeças",
  },
  [583] = {
    ["D"] = "Bem-vind$go:a; à Selva do Espinhaço!$b$bTalvez você não esteja ciente disso, mas aquele anão ali é grande Rosarães Guima, renomado herói de guerra da Aliança e mestre da caça esportiva. Ele não gosta de receber estranhos no acampamento, mas você parece já ter passado por um bocado de ação, $c.$b$bO mestre Guima é um veterano de muitas guerras e tem um fraco por heróis como ele.$b$bVá lá falar com ele. Talvez você consiga umas dicas de caça.",
    ["O"] = "Fale com o Rosarães Guima.",
    ["T"] = "Boas-vindas à selva",
  },
  [584] = {
    ["D"] = "Yennikan não estava entre as cabeças encolhidas, graças à Grande Serpente. Mas nós não estamos mais perto de encontrá-lo.$B$BNós precisamos descobrir a verdade, e eu temo que os únicos que saibam sejam o chefe sanguescalpo e seu mandingueiro. Eles são inimigos da tribo Lançanegra e não vão falar por vontade própria. Precisaremos arrancar a verdade dos lábios mortos deles!$B$BTraga-me a cabeça de Gan\'zulah e de Nezzliok, o Ríspido, e coloque-as no caldeirão.$B$BEles estão nas profundezas de Zul\'Kanda. Traga as cabeças pra mim... elas vão me contar tudo.",
    ["O"] = "Leve a Cabeça de Gan\'zulah e a Cabeça de Nezzliok para o caldeirão borbulhante no Acampamento Grom\'gol.",
    ["T"] = "Cabeças do Clã Sanguescalpo",
  },
  [585] = {
    ["D"] = "<A cabeça de Nezzliok fala.>$B$BÉ verdade. Eu sei para onde o filho dos Lançanegra foi levado. Você me derrotou e prendeu meu espírito, mas eu não direi nada até ser apaziguado!$B$BOs Sanguescalpo estão em guerra com os Rachacrânio. Se quer a minha ajuda, preciso que roube 3 troféus de crânio dos Rachacrânio e ponha-os aqui comigo, para que o meu espírito tenha escravos no Éter.


ce:(O,i,n,a)=>O.flags&y&&m.has(i)||(71==i||72==i)&&2&O.flags?O.parent:O,shift:(O,i,n,a)=>194==i?new R(O,function(O){let i=0;for(let n=0;n<O.length;n++)i+=9==O.charCodeAt(n)?8-i%8:1;return i}(a.read(a.pos,n.pos)),0):195==i?O.parent:24==i||55==i||59==i||3==i?new R(O,0,y):u.has(i)?new R(O,0,u.get(i)|O.flags&y):O,hash:O=>O.hash}),_=new i((O=>{for(let i=0;i<5;i++){if(O.next!="print".charCodeAt(i))return;O.advance()}if(!/\w/.test(String.fromCharCode(O.next)))for(let i=0;;i++){let n=O.peek(i);if(32!=n&&9!=n)return void(40!=n&&46!=n&&n!=$&&13!=n&&35!=n&&O.acceptToken(1))}})),U=new i(((O,i)=>{let{flags:n}=i.context,a=n&z?34:39,e=(n&W)>0,Q=!(n&f),t=(n&v)>0,r=O.pos;for(;!(O.next<0);)if(t&&123==O.next){if(123!=O.peek(1)){if(O.pos==r)return void O.acceptToken(3,1);break}O.advance(2)}else{if(Q&&92==O.next){if(O.pos==r){O.advance();let i=O.next;return i>=0&&(O.advance(),V(O,i)),void O.acceptToken(2)}break}if(92==O.next&&!Q&&O.peek(1)>-1)O.advance(2);else{if(O.next==a&&(!e||O.peek(1)==a&&O.peek(2)==a)){if(O.pos==r)return void O.acceptToken(201,e?3:1);break}if(O.next==$){if(e)O.advance();else if(O.pos==r)return void O.acceptToken(201);break}O.advance()}}O.pos>r&&O.acceptToken(200)}));function V(O,i){if(111==i)for(let n=0;n<2&&O.next>=48&&O.next<=55;n++)O.advance();else if(120==i)for(let n=0;n<2&&g(O.next);n++)O.advance();else if(117==i)for(let n=0;n<4&&g(O.next);n++)O.advance();else if(85==i)for(let n=0;n<8&&g(O.next);n++)O.advance();else if(78==i&&123==O.next){for(O.advance();O.next>=0&&125!=O.next&&39!=O.next&&34!=O.next&&O.next!=$;)O.advance();125==O.next&&O.advance()}}const G=n({'async "*" "**" FormatConversion FormatSpec':e.modifier,"for while if elif else try except finally return raise break continue with pass assert await yield match case":e.controlKeyword,"in not and or is del":e.operatorKeyword,"from def class global nonlocal lambda":e.definitionKeyword,import:e.moduleKeyword,"with as print":e.keyword,Boolean:e.bool,None:e.null,VariableName:e.variableName,"CallExpression/VariableName":e.function(e.variableName),"


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace Permadelete
{
    public static class ExtensionMethods
    {
        public static int RoundOff(this int number, int nearestValue = 5)
        {
            return ((int)Math.Round(number / (double)nearestValue)) * nearestValue;
        }

        public async static Task<bool?> ShowDialogAsync(this Window window)
        {
            if (window == null) throw new ArgumentNullException(nameof(window));

            return await Task.Run(async () =>
            {
                return await window.Dispatcher.InvokeAsync(() => window.ShowDialog());
            });
        }

        public static string ToHumanLanguage(this TimeSpan time)
        {
            if (time >= TimeSpan.FromMinutes(60) && time.Minutes != 0)
                return $"About {time.Hours} hours and {time.Minutes} minutes";
            if (time >= TimeSpan.FromMinutes(50))
                return $"About {time.Hours} hours";


B 2.002")) {
			protocols |= PROT_SMB_2_002;
		} else if (strcsequal(cliprotos[i], "SMB 2.???")) {
			protocols |= PROT_SMB_2_FF;
		} else if (strcsequal(cliprotos[i], "LANMAN2.1")) {
			protocols |= PROT_LANMAN2_1;
		} else if (strcsequal(cliprotos[i], "LM1.2X002")) {
			protocols |= PROT_LM1_2X002;
		} else if (strcsequal(cliprotos[i], "MICROSOFT NETWORKS 1.03")) {
			protocols |= PROT_MICROSOFT_NETWORKS_1_03;
		} else if (strcsequal(cliprotos[i], "MICROSOFT NETWORKS 3.0")) {
			protocols |= PROT_MICROSOFT_NETWORKS_3_0;
		} else if (strcsequal(cliprotos[i], "PC NETWORK PROGRAM 1.0")) {
			protocols |= PROT_PC_NETWORK_PROGRAM_1_0;
		} else if (strcsequal(cliprotos[i], "XENIX CORE")) {
			protocols |= PROT_XENIX_CORE;
		} else if (strcsequal(cliprotos[i], "Samba")) {
			protocols = PROT_SAMBA;
			break;
		} else if (strcsequal(cliprotos[i], "POSIX 2")) {
			protocols = PROT_POSIX_2;
			break;
		}
	}

	switch ( protocols ) {
		/* Old CIFSFS can send one arch only, NT LM 0.12. */
		case PROT_NT_LM_0_12:
		case ARCH_CIFSFS:
			set_remote_arch(RA_CIFSFS);
			break;
		case ARCH_SAMBA:
			set_remote_arch(RA_SAMBA);
			break;
		case ARCH_WFWG:
			set_remote_arch(RA_WFWG);
			break;
		case ARCH_WIN95:
			set_remote_arch(RA_WIN95);
			break;
		case ARCH_WINNT:
			set_remote_arch(RA_WINNT);
			break;
		case ARCH_WIN2K:
			set_remote_arch(RA_WIN2K);
			break;
		case ARCH_VISTA:
			set_remote_arch(RA_VISTA);
			break;
		case ARCH_OS2:
			set_remote_arch(RA_OS2);
			break;
		case ARCH_OSX:
			set_remote_arch(RA_OSX);
			break;
		default:
			set_remote_arch(RA_UNKNOWN);
		break;
	}

	/* possibly reload - change of architecture */
	reload_services(sconn, conn_snum_used, true);

	/*
	 * Anything higher than PROTOCOL_SMB2_10 still
	 * needs to go via "SMB 2.???", which is marked
	 * as PROTOCOL_SMB2_10.
	 *
	 * The real negotiation happens via reply_smb20ff()
	 * using SMB2 Negotiation.
	 */
	max_proto = lp_server_max_protocol();
	if (max_proto > PROTOCOL_SMB2_10) {
		max_proto = PROTOCOL_SMB2_10;
	}
	min_proto = lp_server_min_protocol();
	if (min_proto > PROTOCOL_SMB2_10) {
		min_proto = PROTOCOL_SMB2_10;
	}

	/* Check for protocols, most desirable first */
	for (protocol = 0; supported_protocols[protocol].proto_name; protocol++) {
		i = 0;
		if ((supported_protocols[protocol].protocol_level <= max_proto) &&
		    (supported_protocols[protocol].protocol_level >= min_proto))
			while (i < num_cliprotos) {
				if (strequal(cliprotos[i],supported_protocols[protocol].proto_name)) {
					choice = i;
					chosen_level = supported_protocols[protocol].protocol_level;
					choice_set = true;
				}
				i++;
			}
		if (choice_set) {
			break;
		}
	}

	if (!choice_set) {
		bool ok;

		DBG_NOTICE("No protocol supported !\n");
		reply_smb1_outbuf(req, 1, 0);
		SSVAL(req->outbuf, smb_vwv0, NO_PROTOCOL_CHOSEN);

		ok = smb1_srv_send(xconn, (char *)req->outbuf, false, 0, false);
		if (!ok) {
			DBG_NOTICE("smb1_srv_send failed\n");
		}
		exit_server_cleanly("no protocol supported\n");
	}

	set_remote_proto(supported_protocols[protocol].short_name);
	reload_services(sconn, conn_snum_used, true);
	status = supported_protocols[protocol].proto_reply_fn(req, choice);
	if (!NT_STATUS_IS_OK(status)) {
		exit_server_cleanly("negprot function failed\n");
	}

	DEBUG(3,("Selected protocol %s\n",supported_protocols[protocol].proto_name));

	DBG_INFO("negprot index=%zu\n", choice);

	xconn->smb1.negprot.done = true;

	/* We always have xconn->smb1.signing_state also for >= SMB2_02 */
	signing_required = smb1_signing_is_mandatory(xconn->smb1.signing_state);
	if (signing_required && (chosen_level < PROTOCOL_NT1)) {
		exit_server_cleanly("SMB signing is required and "
			"client negotiated a downlevel protocol");
	}

	TALLOC_FREE(cliprotos);

	if (lp_async_smb_echo_handler() && (chosen_level < PROTOCOL_SMB2_02) &&
	    !fork_echo_handler(xconn)) {
		exit_server("Failed to fork echo handler");
	}

	END_PROFILE(SMBnegprot);
	return;
}


c;

/// Get notified when someone mentions a word you care about.
#[command("highlights")]
#[sub_commands(highlights_add, highlights_get, highlights_remove)]
#[aliases("highlight", "hl")]
#[usage("!highlights <add | get | remove>")]
pub async fn highlights(_: &client::Context, _: &Message) -> CommandResult {
    abort_with!(UserErr::invalid_usage(&HIGHLIGHTS_COMMAND_OPTIONS))
}

/// add a highlight for your user
#[command("add")]
#[usage("!highlights add <word>")]
pub async fn highlights_add(ctx: &client::Context, msg: &Message, args: Args) -> CommandResult {
    let trigger = args.message().trim().to_lowercase();
    if trigger.is_empty() {
        abort_with!(UserErr::invalid_usage(&HIGHLIGHTS_COMMAND_OPTIONS));
    } else if trigger.len() < 3 {
        abort_with!("highlight has to be longer than 2 characters");
    }

    let db: Arc<Db> = ctx.get_db().await;
    let max_highlight_cnt = match crate::checks::get_permission_level(ctx, msg).await {
        PermissionLevel::Mod => 20,
        _ => 4,
    };

    let highlights = db.get_highlights().await?;
    let highlights_by_user_cnt = highlights.triggers_for_user(msg.author.id).count();

    if highlights_by_user_cnt >= max_highlight_cnt {
        abort_with!(UserErr::Other(format!(
            "Sorry, you can only watch a maximum of {} highlights",
            max_highlight_cnt
        )));
    }

    msg.author
        .id
        .create_dm_channel(&ctx)
        .await
        .user_error("Couldn't open a DM to you - do you have me blocked?")?
        .send_message(&ctx, |m| {
            m.embed(|e| {
                e.title("Test to see if you can receive DMs");
                e.description(format!(
                    "If everything went ok, you'll be notified whenever someone says `{}`",
                    trigger
                ))
            })
        })
        .await
        .user_error("Couldn't send you a DM :/\nDo you allow DMs from server members?")?;

    db.set_highlight(msg.author.id, trigger.clone())
        .await
        .user_error("Couldn't add highlight, something went wrong")?;

    msg.reply_success(
        &ctx,
        format!("You will be notified whenever someone says {}", trigger),
    )
    .await?;

    Ok(())
}

/// get all highlights for your user
#[command("get")]
#[aliases("ls", "list")]
#[usage("!highlights get")]
pub async fn highlights_get(ctx: &client::Context, msg: &Message) -> CommandResult {
    let db: Arc<Db> = ctx.get_db().await;
    let highlights = db.get_highlights().await?;

    let highlights_list = highlights.triggers_for_user(msg.author.id).join("\n");

    if highlights_list.is_empty() {
        abort_with!("You don't seem to have set any highlights");
    } else {
        msg.reply_embed(&ctx, |e| {
            e.description(highlights_list);
        })
        .await?;
    }
    Ok(())
}

/// removes a highlight
#[command("remove")]
#[aliases("rm", "delete")]
#[usage("!highlights


mlad  v2, a3, lr, a2
        smlsd  v3, a3, lr, a2

        smuad  v5, a4, ip            /* v5 = B0 = W1*row[1] + W3*row[3] */
        smusdx fp, a4, v7            /* fp = B3 = W7*row[1] - W5*row[3] */
        ldr    lr, [a1, #12]         /* lr = row[7,5] */
        pkhtb  a3, ip, v7, asr #16   /* a4 = W7 | (W3 << 16) */
        pkhbt  a2, ip, v7, lsl #16   /* a2 = W1 | (W5 << 16) */
        smusdx v6, a3, a4            /* v6 = -B1 = W7*row[3] - W3*row[1] */
        smlad  v5, lr, v7, v5        /* B0 += W5*row[5] + W7*row[7] */
        smusdx v7, a4, a2            /* v7 = B2 = W5*row[1] - W1*row[3] */

        ldr    a4, [pc, #(w42n-.-8)] /* a4 = -W4 | (-W2 << 16) */
        smlad  v7, lr, a3, v7        /* B2 += W7*row[5] + W3*row[7] */
        ldr    a3, [a1, #4]          /* a3 = row[6,4] */
        smlsdx fp, lr, ip, fp        /* B3 += W3*row[5] - W1*row[7] */
        ldr    ip, [pc, #(w46-.-8)]  /* ip = W4 | (W6 << 16) */
        smlad  v6, lr, a2, v6        /* B1 -= W1*row[5] + W5*row[7] */

        smlad  v2, a3, a4, v2        /* A1 += -W4*row[4] - W2*row[6] */
        smlsd  v3, a3, a4, v3        /* A2 += -W4*row[4] + W2*row[6] */
        smlad  v1, a3, ip, v1        /* A0 += W4*row[4] + W6*row[6] */
        smlsd  v4, a3, ip, v4        /* A3 += W4*row[4] - W6*row[6] */
        .endm

/*
  Compute partial IDCT of half row.
  shift = left-shift amount
  a3 = row[2,0]
  a4 = row[3,1]
  ip = w42

  Output in registers v1--v8
*/
        .macro idct_row4 shift
        ldr    lr, [pc, #(w46-.-8)]  /* lr = W4 | (W6 << 16) */
        ldr    v7, [pc, #(w57-.-8)]  /* v7 = W5 | (W7 << 16) */
        mov    a2, #(1<<(\shift-1))
        smlad  v1, a3, ip, a2
        smlsd  v4, a3, ip, a2
        ldr    ip, [pc, #(w13-.-8)]  /* ip = W1 | (W3 << 16) */
        smlad  v2, a3, lr, a2
        smlsd  v3, a3, lr, a2
        smusdx fp, a4, v7            /* fp = B3 = W7*row[1] - W5*row[3] */
        smuad  v5, a4, ip            /* v5 = B0 = W1*row[1] + W3*row[3] */
        pkhtb  a3, ip, v7, asr #16   /* a4 = W7 | (W3 << 16) */
        pkhbt  a2, ip, v7, lsl #16   /* a2 = W1 | (W5 << 16) */
        smusdx v6, a3, a4            /* v6 = -B1 = W7*row[3] - W3*row[1] */
        smusdx v7, a4, a2            /* v7 = B2 = W5


orMzuzdszdfFunctorReaderTzuzdcfmap_e()
{
  h$r1 = h$r1.d1;
  return h$ap_4_3_fast();
};
function h$$bff()
{
  var a = h$stack[(h$sp - 1)];
  h$sp -= 2;
  h$r1 = a;
  return h$rs();
};
function h$reflexzm0zi5zmJmKo8RRxVa5HGcolrHUgaJZCReflexziSpiderziInternalzizdfFunctorBehaviorM1_e()
{
  h$p2(h$r2, h$$bff);
  h$l2(h$r4, h$r3);
  return h$ap_2_1_fast();
};
function h$reflexzm0zi5zmJmKo8RRxVa5HGcolrHUgaJZCReflexziSpiderziInternalzizdfApplicativeBehaviorM3_e()
{
  h$r1 = h$r2;
  return h$rs();
};
function h$reflexzm0zi5zmJmKo8RRxVa5HGcolrHUgaJZCReflexziSpiderziInternalzizdfApplicativeBehaviorMzuzdszdfApplicativeReaderTzuzdczlztzg_e()
{
  h$r1 = h$r1.d1;
  return h$ap_4_3_fast();
};
function h$$bfg()
{
  var a = h$stack[(h$sp - 2)];
  var b = h$stack[(h$sp - 1)];
  h$sp -= 3;
  h$l2(b, a);
  return h$ap_2_1_fast();
};
function h$reflexzm0zi5zmJmKo8RRxVa5HGcolrHUgaJZCReflexziSpiderziInternalzizdfApplicativeBehaviorM2_e()
{
  var a = h$r2;
  h$p3(h$r3, h$r4, h$$bfg);
  h$l2(h$r4, a);
  return h$ap_2_1_fast();
};
function h$$bfi()
{
  var a = h$stack[(h$sp - 1)];
  h$sp -= 2;
  h$r1 = a;
  return h$rs();
};
function h$$bfh()
{
  var a = h$r1;
  var b = h$stack[(h$sp - 2)];
  var c = h$stack[(h$sp - 1)];
  h$sp -= 3;
  h$p2(a, h$$bfi);
  h$l2(c, b);
  return h$ap_2_1_fast();
};
function h$reflexzm0zi5zmJmKo8RRxVa5HGcolrHUgaJZCReflexziSpiderziInternalzizdfApplicativeBehaviorM1_e()
{
  var a = h$r2;
  h$p3(h$r3, h$r4, h$$bfh);
  h$l2(h$r4, a);
  return h$ap_2_1_fast();
};
function h$$bfl()
{
  var b = h$r1;
  var c = h$stack[(h$sp - 1)];
  h$sp -= 2;
  var d = h$stack[h$sp];
  --h$sp;
  var e = b;
  var f = (function()
           {
             for(var a = (c.pos - 1);(a >= 0);(a--)) {
               if((c.bag.tickets[a] !== null))
               {
                 return c.bag.tickets[a];
               };


<ZST_Packed as Type>::ReprAlign,
    ];

    assert_type_eq_all![
        MaxAlign,
        <ZST_C as Type>::ReprPacked,
        <ZST_Rust as Type>::ReprPacked,
        <ZST_Packed as Type>::ReprPacked,
    ];
}

mod align_1 {
    use super::*;

    #[typic::repr(align(1))]
    struct Align1;

    const_assert_eq![1, align_of::<Align1>()];

    assert_type_eq_all!(<Align1 as Type>::ReprAlign, MinAlign);
    assert_type_eq_all!(<Align1 as Type>::ReprPacked, MaxAlign);
}

mod multi_align {
    use super::*;

    #[typic::repr(align(2), align(4))]
    struct Align2_4;

    #[typic::repr(align(4), align(2))]
    struct Align4_2;

    const_assert_eq![4, align_of::<Align2_4>()];
    const_assert_eq![4, align_of::<Align4_2>()];

    assert_type_eq_all![
        U4,
        <Align2_4 as Type>::ReprAlign,
        <Align4_2 as Type>::ReprAlign,
    ];
}
use std::collections::HashMap;

pub fn map_test() {
    let a = "a";
    let one = 1;
    let mut map = HashMap::new();
    // map.insert(String::from("a"), 1);
    map.insert(a, one);

    // 上面两种类型 都用下面的方式取
    println!("map.get('a') {:?}", map.get("a")); // Some(1)
    println!("map.get('a') {:?}", map.get("a").unwrap()); // 1
    println!("map {:?}", map);
    println!("a {:?}", a); // 还能用
    println!("one {:?}", one); // 还能用
    map.insert(a,2); // 更新值
    println!("map.get('a') {:?}", map.get("a")); // Some(2)
    map.entry(a).or_insert(3); // 只在键没有对应值时插入
    println!("map.get('a') {:?}", map.get("a")); // Some(2)
    map.entry("b").or_insert(3); // 只在键没有对应值时插入
    println!("map.get('b') {:?}", map.get("b")); // Some(3)

    let mut map2 = HashMap::new();
    let v = String::from("v");
    let k = String::from("k");
    map2.insert(k, v);
    println!("map2 {:?}", map2);
    // println!("k {}", k); // k不能用了
    // println!("v {}", v); // v不能用了

    // vec转hashmap
    let teams = vec![String::from("Blue"), String::from("Yellow")];
    let initial_scores = vec![10, 50];
    let scores: HashMap<_, _> = teams.iter().zip(initial_scores.iter()).collect();
    println!("vec => hashmap {:?}", scores); // vec => hashmap {"Blue": 10, "Yellow": 50}
    // 遍历
    for (key, value) in &scores {
        println!("{}: {}", key, value);
    }

    // 根据旧值更新一个值
    let text = "hello world wonderful world";
    let mut map = HashMap::new();
    for word in text.split_whitespace() {
        let count = map.entry(word).or_insert(0);
        *count += 1;
    }
    println!("{:?}", map);  // {"wonderful": 1, "hello": 1, "world": 2}
}
// For reading and opening files
use png;
use png::text_metadata::{ITXtChunk, ZTXtChunk};
use std::env;
use std::fs::File;
use std::io::BufWriter;

fn main() {
    let path = env::args()
        .nth(1)
        .expect("Expected a filename to output to.");
    let file = File::create(path).unwrap();


onder = assert_variant!(exec.run_singlethreaded(&mut request_stream.next()),
                                         Some(Ok(ListIfaces{responder})) => responder);
        // The fake response is sent.
        responder.send(&mut list_response).expect("sending list ifaces response");

        for mut query_resp in query_responses {
            // This line advances the future to the point where it calls query_iface(id) and waits
            // for a response.
            assert_variant!(exec.run_until_stalled(&mut iface_id_fut), Poll::Pending);
            // The fake server receives the call as a request.
            let (id, responder) = assert_variant!(
                exec.run_singlethreaded(&mut request_stream.next()),
                Some(Ok(QueryIface{iface_id, responder})) => (iface_id, responder));
            assert_eq!(id, query_resp.id);
            // The fake response is sent.
            responder.send(ZX_OK, Some(&mut query_resp)).expect("sending query iface response");
        }

        match expected_id {
            Some(id) => {
                let got_id = assert_variant!(exec.run_until_stalled(&mut iface_id_fut),
                                            Poll::Ready(id) => id);
                assert_eq!(got_id, id);
            }
            None => assert_variant!(exec.run_until_stalled(&mut iface_id_fut), Poll::Pending),
        }
    }

    #[test]
    fn no_iface() {
        test_matching_iface_id(|_iface| true, ListIfacesResponse { ifaces: vec![] }, vec![], None);
    }

    #[test]
    fn found_ap_iface() {
        test_matching_iface_id(
            |iface| iface.role == Ap,
            ListIfacesResponse { ifaces: vec![fake_iface_item(0), fake_iface_item(3)] },
            vec![
                fake_query_iface_response(),
                QueryIfaceResponse { role: Ap, id: 3, ..fake_query_iface_response() },
            ],
            Some(3),
        );
    }

    #[test]
    fn ifaces_exist_but_no_match() {
        test_matching_iface_id(
            |iface| iface.role == Client,
            ListIfacesResponse { ifaces: vec![fake_iface_item(0)] },
            vec![QueryIfaceResponse { role: Ap, ..fake_query_iface_response() }],
            None,
        )
    }
}
//! Demonstrates how to load and render sprites.
//!
//! Sprites are from <https://opengameart.org/content/bat-32x32>.

use amethyst::{
    animation::{
        get_animation_set, AnimationBundle, AnimationCommand, AnimationControlSet, AnimationSet,
        AnimationSetPrefab, EndControl,
    },
    assets::{PrefabData, PrefabLoader, PrefabLoaderSystemDesc, ProgressCounter, RonFormat},
    core::transform::{Transform, TransformBundle},
    derive::PrefabData,
    ecs::{prelude::Entity, Entities, Join, ReadStorage, WriteStorage},
    error::Error,
    prelude::{Builder, World, WorldExt},
    renderer::{
        camera::Camera,
        plugins::{RenderFlat2D, RenderToWindow},
        sprite::{prefab::SpriteScenePrefab, SpriteRender},
        types::DefaultBackend,
        RenderingBundle,
    },
    utils::application_root_dir,
    window::ScreenDimensions,
    Application, GameData, GameDataBuilder, SimpleState, SimpleTrans, StateData, Trans,
};
use serde::{Deserialize, Serialize};

/// Animation ids used in a AnimationSet
#[derive(Eq, PartialOrd, PartialEq, Hash, Debug, Copy, Clone, Deserialize, Serialize)]
enum AnimationId {
    Fly,
}

/// Loading data for one entity
#[derive(Debug, Clone, Deserialize, PrefabData)]
struct MyPrefabData {
    /// Information for rendering a scene with sprites
    sprite_scene: SpriteScenePrefab,
    /// Аll animations that can be run on the entity
    animation_set: AnimationSetPrefab<Animatio


     Box::pin(async move {
            self.stream.wait_until_ready().await?;

            let (_, metadata) = self.get_or_prepare(sql, false).await?;

            let columns = (&*metadata.columns).clone();

            let nullable = columns
                .iter()
                .map(|col| {
                    col.flags
                        .map(|flags| !flags.contains(ColumnFlags::NOT_NULL))
                })
                .collect();

            Ok(Describe {
                parameters: Some(Either::Right(metadata.parameters)),
                columns,
                nullable,
            })
        })
    }
}

async fn recv_result_columns(
    stream: &mut MySqlStream,
    num_columns: usize,
    columns: &mut Vec<MySqlColumn>,
) -> Result<(), Error> {
    columns.clear();
    columns.reserve(num_columns);

    for ordinal in 0..num_columns {
        columns.push(recv_next_result_column(&stream.recv().await?, ordinal)?);
    }

    if num_columns > 0 {
        stream.maybe_recv_eof().await?;
    }

    Ok(())
}

fn recv_next_result_column(def: &ColumnDefinition, ordinal: usize) -> Result<MySqlColumn, Error> {
    // if the alias is empty, use the alias
    // only then use the name
    let name = match (def.name()?, def.alias()?) {
        (_, alias) if !alias.is_empty() => UStr::new(alias),
        (name, _) => UStr::new(name),
    };

    let type_info = MySqlTypeInfo::from_column(&def);

    Ok(MySqlColumn {
        name,
        type_info,
        ordinal,
        flags: Some(def.flags),
    })
}

async fn recv_result_metadata(
    stream: &mut MySqlStream,
    num_columns: usize,
    columns: &mut Vec<MySqlColumn>,
) -> Result<HashMap<UStr, usize>, Error> {
    // the result-set metadata is primarily a listing of each output
    // column in the result-set

    let mut column_names = HashMap::with_capacity(num_columns);

    columns.clear();
    columns.reserve(num_columns);

    for ordinal in 0..num_columns {
        let def: ColumnDefinition = stream.recv().await?;

        let column = recv_next_result_column(&def, ordinal)?;

        column_names.insert(column.name.clone(), ordinal);
        columns.push(column);
    }

    stream.maybe_recv_eof().await?;

    Ok(column_names)
}
<reponame>wcpannell/s32k1-pacs<filename>s32k148-pac/src/s32_scb.rs
#[doc = r"Register block"]
#[repr(C)]
pub struct RegisterBlock {
    _reserved0: [u8; 0x08],
    #[doc = "0x08 - Auxiliary Control Register,"]
    pub actlr: crate::Reg<actlr::ACTLR_SPEC>,
    _reserved1: [u8; 0x0cf4],
    #[doc = "0xd00 - CPUID Base Register"]
    pub cpuid: crate::Reg<cpuid::CPUID_SPEC>,
    #[doc = "0xd04 - Interrupt Control and State Register"]
    pub icsr: crate::Reg<icsr::ICSR_SPEC>,
    #[doc = "0xd08 - Vector Table Offset Register"]
    pub vtor: crate::Reg<vtor::VTOR_SPEC>,
    #[doc = "0xd0c - Application Interrupt and Reset Control Register"]
    pub aircr: crate::Reg<aircr::AIRCR_SPEC>,
    #[doc = "0xd10 - System Control Register"]
    pub scr: crate::Reg<scr::SCR_SPEC>,
    #[doc = "0xd14 - Configuration and Control Register"]
    pub ccr: crate::Reg<ccr::CCR_SPEC>,
    #[doc = "0xd18 - System Handler Priority Register 1"]
    pub shpr1: crate::Reg<shpr1::SHPR1_SPEC>,
    #[doc = "0xd1c - System Handler Priority Register 2"]
    pub sh


insight.server.common.service.AlertDingDingRobotService;
import io.holoinsight.server.common.service.RequestContextAdapter;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author wangsiyuan
 * @date 2022/4/1 10:44 上午
 */
@Service
public class AlertDingDingRobotServiceImpl extends
    ServiceImpl<AlarmDingDingRobotMapper, AlarmDingDingRobot> implements AlertDingDingRobotService {

  @Resource
  private AlarmDingDingRobotConverter alarmDingDingRobotConverter;

  @Autowired
  private RequestContextAdapter requestContextAdapter;

  @Override
  public Long save(AlarmDingDingRobotDTO alarmDingDingRobotDTO) {
    AlarmDingDingRobot alarmDingDingRobot =
        alarmDingDingRobotConverter.dtoToDO(alarmDingDingRobotDTO);
    this.save(alarmDingDingRobot);
    return alarmDingDingRobot.getId();
  }

  @Override
  public Boolean updateById(AlarmDingDingRobotDTO alarmDingDingRobotDTO) {
    AlarmDingDingRobot alarmDingDingRobot =
        alarmDingDingRobotConverter.dtoToDO(alarmDingDingRobotDTO);
    return this.updateById(alarmDingDingRobot);
  }

  @Override
  public AlarmDingDingRobotDTO queryById(Long id, String tenant) {
    QueryWrapper<AlarmDingDingRobot> wrapper = new QueryWrapper<>();
    requestContextAdapter.queryWrapperTenantAdapt(wrapper, tenant,
        requestContextAdapter.getWorkspace(true));
    wrapper.eq("id", id);
    wrapper.last("LIMIT 1");
    AlarmDingDingRobot alarmDingDingRobot = this.getOne(wrapper);
    return alarmDingDingRobotConverter.doToDTO(alarmDingDingRobot);
  }

  @Override
  public MonitorPageResult<AlarmDingDingRobotDTO> getListByPage(
      MonitorPageRequest<AlarmDingDingRobotDTO> pageRequest) {
    if (pageRequest.getTarget() == null) {
      return null;
    }

    QueryWrapper<AlarmDingDingRobot> wrapper = new QueryWrapper<>();

    AlarmDingDingRobot alarmDingDingRobot =
        alarmDingDingRobotConverter.dtoToDO(pageRequest.getTarget());

    requestContextAdapter.queryWrapperTenantAdapt(wrapper, alarmDingDingRobot.getTenant(),
        alarmDingDingRobot.getWorkspace());

    if (null != alarmDingDingRobot.getId()) {
      wrapper.eq("id", alarmDingDingRobot.getId());
    }

    if (StringUtils.isNotBlank(alarmDingDingRobot.getGroupName())) {
      wrapper.like("group_name", alarmDingDingRobot.getGroupName().trim());
    }

    wrapper.orderByDesc("id");

    Page<AlarmDingDingRobot> page = new Page<>(pageRequest.getPageNum(), pageRequest.getPageSize());

    page = page(page, wrapper);

    MonitorPageResult<AlarmDingDingRobotDTO> alarmDingDingRobots = new MonitorPageResult<>();

    List<AlarmDingDingRobotDTO> alarmDingDingRobotList =
        alarmDingDingRobotConverter.dosToDTOs(page.getRecords());

    alarmDingDingRobots.setItems(alarmDingDingRobotList);
    alarmDingDingRobots.setPageNum(pageRequest.getPageNum());
    alarmDingDingRobots.setPageSize(pageRequest.getPageSize());
    alarmDingDingRobots.setTotalCount(page.getTotal());
    alarmDingDingRobots.setTotalPage(page.getPages());

    return alarmDingDingRobots;
  }
}
/*
 * Cop


name)) {
            mismatchIndexes.add(extraIndex)
        }
    }
    val mismatchIndexNames = mismatchIndexes.map { it.name }
    missingIndexes = missingIndexes.filter { !mismatchIndexNames.contains(it.name) }
    extraIndexes = extraIndexes - mismatchIndexes.toSet()
    val indexTip = "Compared with the table of database ($referenceDbUrl/$referenceDatabaseName), " +
            "the differences of table ($tableName) of database ($compareDbUrl/$compareDatabaseName) are as " +
            "follows:  missing indexs: $missingIndexes;  extra indexs: $extraIndexes;  " +
            "different indexs: $mismatchIndexes."
    if (missingIndexes.isNotEmpty() || extraIndexes.isNotEmpty() || mismatchIndexes.isNotEmpty()) {
        // 字段有差异则抛出错误提示
        throw RuntimeException(indexTip)
    }
}
/*
 * Tencent is pleased to support the open source community by making BK-CI 蓝鲸持续集成平台 available.
 *
 * Copyright (C) 2024 Tencent.  All rights reserved.
 *
 * BK-CI 蓝鲸持续集成平台 is licensed under the MIT license.
 *
 * A copy of the MIT License is included in this file.
 *
 *
 * Terms of the MIT License:
 * ---------------------------------------------------
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "   AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
/*
 * Tencent is pleased to support the open source community by making BK-CI 蓝鲸持续集成平台 available.
 *
 * Copyright (C) 2021 Tencent.  All rights reserved.
 *
 * BK-CI 蓝鲸持续集成平台 is licensed under the MIT license.
 *
 * A copy of the MIT License is included in this file.
 *
 *
 * Terms of the MIT License:
 * ---------------------------------------------------
 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
 * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all copies or substantial portions of
 * the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
 * LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
 * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

/*
 * Tencent is pleased to support the open source community by making BK-CI �


end(removeCmds, []string{"yum", "remove"}...)
		if config.OSVersion == "8" || config.OSVersion == "9" {
			removeCmds[0] = "dnf"
		}
		if yes {
			removeCmds = append(removeCmds, "-y")
		}
	case config.DistroDEB:
		removeCmds = append(removeCmds, []string{"apt-get", "remove"}...)
		if yes {
			removeCmds = append(removeCmds, "-y")
		}
	default:
		return fmt.Errorf("unsupported OS type: %s", config.OSType)
	}

	var pkgNames []string
	for _, name := range names {
		ext, ok := Catalog.ExtNameMap[name]
		if !ok {
			ext, ok = Catalog.ExtAliasMap[name]
		}

		if !ok {
			// try to find in PostgresPackageMap (if it is not a postgres extension)
			if pgPkg, ok := Catalog.AliasMap[name]; ok {
				pkgNames = append(pkgNames, processPkgName(pgPkg, pgVer)...)
				continue
			} else {
				logrus.Debugf("can not found '%s' in extension name or alias", name)
				continue
			}
		}
		pkgName := ext.PackageName(pgVer)
		if pkgName == "" {
			logrus.Warnf("no package found for extension %s", ext.Name)
			continue
		}
		logrus.Debugf("translate extension %s to package name: %s", ext.Name, pkgName)
		pkgNames = append(pkgNames, processPkgName(pkgName, pgVer)...)
	}

	if len(pkgNames) == 0 {
		return fmt.Errorf("no packages to be removed")
	}
	removeCmds = append(removeCmds, pkgNames...)
	logrus.Infof("removing extensions: %s", strings.Join(removeCmds, " "))

	return utils.SudoCommand(removeCmds)
}
package ext

import (
	"reflect"
	"testing"
)

func TestParseExtension(t *testing.T) {
	tests := []struct {
		name    string
		record  []string
		want    *Extension
		wantErr bool
	}{
		{
			name: "valid timescaledb extension",
			record: []string{
				"1000", "timescaledb", "timescaledb", "TIME", "https://github.com/timescale/timescaledb",
				"PIGSTY", "", "2.17.2", "PIGSTY", "C", "f", "t", "t", "t", "t", "f", "f", "",
				"{17,16,15,14}", "", "2.17.2", "PIGSTY", "pg_timescaledb_$v*", "{17,16,15,14}", "",
				"2.17.2", "PIGSTY", "timescaledb-2-postgresql-$v", "", "{17,16,15,14}", "",
				"Enables scalable inserts and complex queries for time-series data", "Time-series database extension plugin",
				"degrade to oss ver on el.aarch64",
			},
			want: &Extension{
				ID:          1000,
				Name:        "timescaledb",
				Alias:       "timescaledb",
				Category:    "TIME",
				URL:         "https://github.com/timescale/timescaledb",
				License:     "PIGSTY",
				Tags:        []string{},
				Version:     "2.17.2",
				Repo:        "PIGSTY",
				Lang:        "C",
				Utility:     false,
				Lead:        true,
				HasSolib:    true,
				NeedDDL:     true,
				NeedLoad:    true,
				Trusted:     "f",
				Relocatable: "f",
				Schemas:     []string{},
				PgVer:       []string{"17", "16", "15",


te)(3 - (v >> 6));
                if (CH[c].SLOT[s].KSR != old_KSR)
                {
                    CH[c].SLOT[0].Incr = -1;
                }
                if ((CH[c].SLOT[s].ar + CH[c].SLOT[s].ksr) < 32 + 62)
                {
                    CH[c].SLOT[s].eg_sh_ar = eg_rate_shift[CH[c].SLOT[s].ar + CH[c].SLOT[s].ksr];
                    if ((type == TYPE_YM2612) || (type == TYPE_YM2608))
                    {
                        CH[c].SLOT[s].eg_sel_ar = eg_rate_select2612[CH[c].SLOT[s].ar + CH[c].SLOT[s].ksr];
                    }
                    else
                    {
                        CH[c].SLOT[s].eg_sel_ar = eg_rate_select[CH[c].SLOT[s].ar + CH[c].SLOT[s].ksr];
                    }
                }
                else
                {
                    CH[c].SLOT[s].eg_sh_ar = 0;
                    CH[c].SLOT[s].eg_sel_ar = 17 * 8;
                }
            }
            private void set_dr(int c, int s, byte v)
            {
                CH[c].SLOT[s].d1r = ((v & 0x1f) != 0) ? 32 + ((v & 0x1f) << 1) : 0;
                CH[c].SLOT[s].eg_sh_d1r = eg_rate_shift[CH[c].SLOT[s].d1r + CH[c].SLOT[s].ksr];
                if ((type == TYPE_YM2612) || (type == TYPE_YM2608))
                {
                    CH[c].SLOT[s].eg_sel_d1r = eg_rate_select2612[CH[c].SLOT[s].d1r + CH[c].SLOT[s].ksr];
                }
                else
                {
                    CH[c].SLOT[s].eg_sel_d1r = eg_rate_select[CH[c].SLOT[s].d1r + CH[c].SLOT[s].ksr];
                }
            }
            private void set_sr(int c, int s, byte v)
            {
                CH[c].SLOT[s].d2r = ((v & 0x1f) != 0) ? 32 + ((v & 0x1f) << 1) : 0;
                CH[c].SLOT[s].eg_sh_d2r = eg_rate_shift[CH[c].SLOT[s].d2r + CH[c].SLOT[s].ksr];
                if ((type == TYPE_YM2612) || (type == TYPE_YM2608))
                {
                    CH[c].SLOT[s].eg_sel_d2r = eg_rate_select2612[CH[c].SLOT[s].d2r + CH[c].SLOT[s].ksr];
                }
                else
                {
                    CH[c].SLOT[s].eg_sel_d2r = eg_rate_select[CH[c].SLOT[s].d2r + CH[c].SLOT[s].ksr];
                }
            }
            private void set_sl_rr(int c, int s, byte v)
            {
                CH[c].SLOT[s].sl = sl_table[v >> 4];
                CH[c].SLOT[s].rr = 34 + ((v & 0x0f) << 2);
                CH[c].SLOT[s].eg_sh_rr = eg_rate_shift[CH[c].SLOT[s].rr + CH[c].SLOT[s].ksr];
                if ((type == TYPE_YM2612) || (type == TYPE_YM2608))
                {
                    CH[c].SLOT[s].eg_sel_rr = eg_rate_select2612[CH[c].SLOT[s].rr + CH[c].SLOT[s].ksr];
                }
                else
                {
                    CH[c].SLOT[s].eg_sel_rr = eg_rate_select[CH[c].SLOT[s].rr + CH[c].SLOT[s].ksr];
                }
            }
            public void advance_lfo()
            {
                byte pos;
                byte prev_pos;
                if (lfo_inc != 0)
                {
                    prev_pos = (byte)(lfo_cnt >> 24 & 127);


_LIGHT_GREY : LIGHT_LIGHT_GREY },
                        '2' => new SolidColorBrush { Color = IS_DARK ? DARK_RED : LIGHT_RED },
                        '3' => new SolidColorBrush { Color = IS_DARK ? DARK_BLUE : LIGHT_BLUE },
                        '4' => new SolidColorBrush { Color = IS_DARK ? DARK_GREEN : LIGHT_GREEN },
                        '5' => new SolidColorBrush { Color = IS_DARK ? DARK_YELLOW : LIGHT_YELLOW },
                        _ => new SolidColorBrush { Color = IS_DARK ? DARK_YELLOW : LIGHT_YELLOW },
                    };
                    p.Inlines.Add(new Run { Text = line[1..] + "\n", Foreground = color });
                }
                ((Run)p.Inlines[^1]).Text = ((Run)p.Inlines[^1]).Text.TrimEnd();
                LogTextBox.Blocks.Add(p);
            }
        }

        public override void LoadLog(bool isReload = false)
        {
            foreach (IPackageManager manager in PEInterface.Managers)
            {
                if (LogLevelCombo.SelectedValue?.ToString()?.Contains(manager.DisplayName) ?? false)
                {
                    LoadForManager(manager);
                    break;
                }

                if (isReload) MainScroller.ScrollToVerticalOffset(MainScroller.ScrollableHeight);
            }
        }

        protected override void LoadLogLevels()
        {
            LogLevelCombo.Items.Clear();
            foreach (IPackageManager manager in PEInterface.Managers)
            {
                LogLevelCombo.Items.Add(manager.DisplayName);
                LogLevelCombo.Items.Add($"{manager.DisplayName} ({CoreTools.Translate("Verbose")})");
            }
            LogLevelCombo.SelectedIndex = 0;
        }
    }
}


/**
 * @file  hal_board.c
 *
 * Copyright 2010 Texas Instruments, Inc.
******************************************************************************/
#include "msp430.h"
#include "hal_MSP-EXP430F5438.h"

/**********************************************************************//**
 * @brief  Initializes ACLK, MCLK, SMCLK outputs on P11.0, P11.1,
 *         and P11.2, respectively.
 *
 * @param  none
 *
 * @return none
 *************************************************************************/
void halBoardOutputSystemClock(void) //outputs clock to testpoints
{
  CLK_PORT_DIR |= 0x07;
  CLK_PORT_SEL |= 0x07;
}

/**********************************************************************//**
 * @brief  Stops the output of ACLK, MCLK, SMCLK on P11.0, P11.1, and P11.2.
 *
 * @param  none
 *
 * @return none
 *************************************************************************/
void halBoardStopOutputSystemClock(void)
{
  CLK_PORT_OUT &= ~0x07;
  CLK_PORT_DIR |= 0x07;
  CLK_PORT_SEL &= ~0x07;
}

/**********************************************************************//**
 * @brief  Initializes all GPIO configurations.
 *
 * @param  none
 *
 * @return none
 *************************************************************************/
void halBoardInit(void)
{
  //Tie unused ports
  PAOUT  = 0;
  PADIR  = 0xFFFF;
  PASEL  = 0;
  PBOUT  = 0;
  PBDIR  = 0xFFFF;
  PBSEL  = 0;
  PCOUT  = 0;
  PCDIR  = 0xFFFF;
  PCSEL  = 0;
  PDOUT  = 0;
  PDDIR  = 0xFFFF;
  PDSEL  = 0x0003;
  PEOUT  = 0;
  PEDIR  = 0xFEFF;                          // P10.0 to USB RST pin,
                                            // ...if enabled with J5
  PESEL  = 0;
  P11OUT = 0;
  P11DIR = 0xFF;
  PJOUT  = 0;
  PJDIR  = 0xFF;
  P11SEL = 0;
}

/**********************************************************************//**
 * @brief  Set function for MCLK frequency.
 *
 *
 * @return none
 *************************************************************************/
void hal430SetSystemClock(unsigned long req_clock_rate, unsigned long ref_clock_rate)
{
  /* Convert a Hz value to a KHz value, as required
   *  by the Init_FLL_Settle() function. */
  unsigned long ulCPU_Clock_KHz = req_clock_rate / 1000UL;

  //Make sure we aren't overclocking
  if(ulCPU_Clock_KHz > 25000L)
  {
    ulCPU_Clock_KHz = 25000L;
  }

  //Set VCore to a level sufficient for the requested clock speed.
  if(ulCPU_Clock_KHz <= 8000L)
  {
    SetVCore(PMMCOREV_0);
  }
  else if(ulCPU_Clock_KHz <= 12000L)
  {
    SetVCore(PMMCOREV_1);
  }
  else if(ulCPU_Clock_KHz <= 20000L)
  {
    SetVCore(PMMCOREV_2);
  }
  else
  {
    SetVCore(PMMCOREV_3);
  }

  //Set the DCO
  Init_FLL_Settle( ( unsigned short )ulCPU_Clock_KHz, req_clock_rate / ref_clock_rate );
}


al**>(signal));
}

daqErrCode daqSignal_getRelatedSignals(daqSignal* self, daqList** signals)
{
    return reinterpret_cast<daq::ISignal*>(self)->getRelatedSignals(reinterpret_cast<daq::IList**>(signals));
}

daqErrCode daqSignal_getConnections(daqSignal* self, daqList** connections)
{
    return reinterpret_cast<daq::ISignal*>(self)->getConnections(reinterpret_cast<daq::IList**>(connections));
}

daqErrCode daqSignal_getStreamed(daqSignal* self, daqBool* streamed)
{
    return reinterpret_cast<daq::ISignal*>(self)->getStreamed(streamed);
}

daqErrCode daqSignal_setStreamed(daqSignal* self, daqBool streamed)
{
    return reinterpret_cast<daq::ISignal*>(self)->setStreamed(streamed);
}

daqErrCode daqSignal_getLastValue(daqSignal* self, daqBaseObject** value)
{
    return reinterpret_cast<daq::ISignal*>(self)->getLastValue(reinterpret_cast<daq::IBaseObject**>(value));
}
//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
//
//     RTGen (CGenerator v0.7.0) on 03.06.2025 22:07:44.
// </auto-generated>
//------------------------------------------------------------------------------

#include <copendaq/signal/dimension_rule_builder.h>

#include <opendaq/opendaq.h>

#include <copendaq_private.h>

const daqIntfID DAQ_DIMENSION_RULE_BUILDER_INTF_ID = { daq::IDimensionRuleBuilder::Id.Data1, daq::IDimensionRuleBuilder::Id.Data2, daq::IDimensionRuleBuilder::Id.Data3, daq::IDimensionRuleBuilder::Id.Data4_UInt64 };

daqErrCode daqDimensionRuleBuilder_build(daqDimensionRuleBuilder* self, daqDimensionRule** dimensionRule)
{
    return reinterpret_cast<daq::IDimensionRuleBuilder*>(self)->build(reinterpret_cast<daq::IDimensionRule**>(dimensionRule));
}

daqErrCode daqDimensionRuleBuilder_setType(daqDimensionRuleBuilder* self, daqDimensionRuleType type)
{
    return reinterpret_cast<daq::IDimensionRuleBuilder*>(self)->setType(static_cast<daq::DimensionRuleType>(type));
}

daqErrCode daqDimensionRuleBuilder_getType(daqDimensionRuleBuilder* self, daqDimensionRuleType* type)
{
    return reinterpret_cast<daq::IDimensionRuleBuilder*>(self)->getType(reinterpret_cast<daq::DimensionRuleType*>(type));
}

daqErrCode daqDimensionRuleBuilder_setParameters(daqDimensionRuleBuilder* self, daqDict* parameters)
{
    return reinterpret_cast<daq::IDimensionRuleBuilder*>(self)->setParameters(reinterpret_cast<daq::IDict*>(parameters));
}

daqErrCode daqDimensionRuleBuilder_getParameters(daqDimensionRuleBuilder* self, daqDict** parameters)
{
    return reinterpret_cast<daq::IDimensionRuleBuilder*>(self)->getParameters(reinterpret_cast<daq::IDict**>(parameters));
}

daqErrCode daqDimensionRuleBuilder_addParameter(daqDimensionRuleBuilder* self, daqString* name, daqBaseObject* parameter)
{
    return reinterpret_cast<daq::IDimensionRuleBuilder*>(self)->addParameter(reinterpret_cast<daq::IString*>(name), reinterpret_cast<daq::IBaseObject*>(parameter));
}

daqErrCode daqDimens


i data-type='member'>OUTPUT

SELF

mutation

ADD_BACK_CONN

ADD_CONN

ADD_GATE

ADD_NODE

ADD_SELF_CONN

ALL

FFW

MOD_ACTIVATION

MOD_BIAS

MOD_WEIGHT

SUB_BACK_CONN

SUB_CONN

SUB_GATE

SUB_NODE

SUB_SELF_CONN

SWAP_NODES

rate

EXP

FIXED

INV

STEP

selection

FITNESS_PROPORTIONATE

POWER

TOURNAMENT

Global

config

GAN

sort

population.js

const _ = require("lodash");
let Network = require('./architecture


 i = srcLength;
/*     */
/*     */         int c;
/*     */         do
/*     */         {
/* 173 */           c = UTF16.charAt(src, srcLength - 1);
/* 174 */           srcLength -= UTF16.getCharCount(c);
/* 175 */         } while ((srcLength > 0) && (IsCombining(UCharacter.getType(c))));
/*     */
/*     */
/* 178 */         dest.append(src.substring(srcLength, i));
/* 179 */       } while (srcLength > 0);
/* 180 */       break;
/*     */
/*     */
/*     */
/*     */
/*     */
/*     */
/*     */
/*     */
/*     */     default:
/* 190 */       srcLength = src.length();
/*     */
/*     */
/*     */
/*     */       do
/*     */       {
/* 196 */         int i = srcLength;
/*     */
/*     */
/* 199 */         int c = UTF16.charAt(src, srcLength - 1);
/* 200 */         srcLength -= UTF16.getCharCount(c);
/* 201 */         if ((options & 0x1) != 0)
/*     */         {
/* 203 */           while ((srcLength > 0) && (IsCombining(UCharacter.getType(c)))) {
/* 204 */             c = UTF16.charAt(src, srcLength - 1);
/* 205 */             srcLength -= UTF16.getCharCount(c);
/*     */           }
/*     */         }
/*     */
/* 209 */         if (((options & 0x8) == 0) || (!Bidi.IsBidiControlChar(c)))
/*     */         {
/*     */
/*     */
/*     */
/*     */
/*     */
/* 216 */           int j = srcLength;
/* 217 */           if ((options & 0x2) != 0)
/*     */           {
/* 219 */             c = UCharacter.getMirror(c);
/* 220 */             UTF16.append(dest, c);
/* 221 */             j += UTF16.getCharCount(c);
/*     */           }
/* 223 */           dest.append(src.substring(j, i));
/* 224 */         } } while (srcLength > 0);
/*     */     }
/*     */
/*     */
/* 228 */     return dest.toString();
/*     */   }
/*     */
/*     */   static String doWriteReverse(char[] text, int start, int limit, int options)
/*     */   {
/* 233 */     return writeReverse(new String(text, start, limit - start), options);
/*     */   }
/*     */
/*     */
/*     */
/*     */   static String writeReordered(Bidi bidi, int options)
/*     */   {
/* 240 */     char[] text = bidi.text;
/* 241 */     int runCount = bidi.countRuns();
/*     */
/*     */
/*     */
/*     */
/*     */
/* 247 */     if ((bidi.reorderingOptions & 0x1) != 0) {
/* 248 */       options |= 0x4;
/* 249 */       options &= 0xFFFFFFF7;
/*     */     }
/*     */
/*     */
/*     */
/*     */
/* 255 */     if ((bidi.reorderingOptions & 0x2) != 0) {
/* 256 */       options |= 0x8;
/* 257 */       options &= 0xFFFFFFFB;
/*     */     }
/*     */
/*     */
/*     */
/*     */
/* 263 */     if ((bidi.reorderingMode != 4) && (bidi.reorderingMode != 5) && (bidi.reorderingMode != 6) && (bidi.reorderingMode != 3))
/*     */     {
/*     */
/*     */
/* 267 */       options &= 0xFFFFFFFB;
/*     */     }
/* 269 */     StringBuilder dest = new StringBuilder((options & 0x4) != 0 ? bidi.lengt


ssFeq = fRef/fSum;
    mssSeq = sRef/sSum;

  } else {

    mssFeq = 1.0;
    mssSeq = 1.0;

  }

  // initial basic stiffness matrix
  basicStiffInit.Zero();
  for (int i=0; i<nSpring; i++)  {
    double tmpTangent = theMaterials[i]->getInitialTangent();

    basicStiffInit(1,1) += tmpTangent * cosTht[i] * cosTht[i];
    basicStiffInit(1,2) += tmpTangent * cosTht[i] * sinTht[i];
    basicStiffInit(2,1) += tmpTangent * sinTht[i] * cosTht[i];
    basicStiffInit(2,2) += tmpTangent * sinTht[i] * sinTht[i];
  }

  // Seq: equivalent coefficient for stiffness
  basicStiffInit *= mssSeq;

  // initialize variables
  this->revertToStart();
}

MultipleShearSpring::MultipleShearSpring()
  : Element(0, ELE_TAG_MultipleShearSpring),
    connectedExternalNodes(2),
    nSpring(0), limDisp(0), oriX(0), oriYp(0), mass(0.0),
    Tgl(12,12), Tlb(6,12),
    basicDisp(6), localDisp(12), basicForce(6), basicStiff(6,6), basicStiffInit(6,6)
{

  // ensure the connectedExternalNode ID is of correct size & set values
  if (connectedExternalNodes.Size() != 2)  {
    opserr << "MultipleShearSpring::MultipleShearSpring() - "
	   <<  "failed to create an ID of size 2\n";
    exit(-1);
  }

  // set node pointers to NULL
  for (int i=0; i<2; i++)
    theNodes[i] = 0;

  // set material array pointers to NULL
  theMaterials = 0;
  dmyMssMaterial = 0;

}

MultipleShearSpring::~MultipleShearSpring()
{
  // invoke the destructor on any objects created by the object
  // that the object still holds a pointer to

  if (theMaterials != 0) {
    for (int i=0; i<nSpring; i++)
      if (theMaterials[i] != 0)
	delete theMaterials[i];
    delete [] theMaterials;
  }

  if (cosTht != 0)
    delete [] cosTht;

  if (sinTht != 0)
    delete [] sinTht;

  if (dmyMssMaterial != 0)
    delete dmyMssMaterial;

}

int MultipleShearSpring::getNumExternalNodes() const
{
  return 2;
}

const ID& MultipleShearSpring::getExternalNodes()
{
  return connectedExternalNodes;
}

Node** MultipleShearSpring::getNodePtrs()
{
  return theNodes;
}

int MultipleShearSpring::getNumDOF()
{
  return 12;
}

void MultipleShearSpring::setDomain(Domain *theDomain)
{
  // check Domain is not null - invoked when object removed from a domain
  if (!theDomain)  {
    theNodes[0] = 0;
    theNodes[1] = 0;

    return;
  }

  // first set the node pointers
  theNodes[0] = theDomain->getNode(connectedExternalNodes(0));
  theNodes[1] = theDomain->getNode(connectedExternalNodes(1));

  // if can't find both - send a warning message
  if (!theNodes[0] || !theNodes[1])  {
    if (!theNodes[0])  {
      opserr << "WARNING MultipleShearSpring::setDomain() - Nd1: "
	     << connectedExternalNodes(0) << " does not exist in the model for ";
    } else  {
      opserr << "WARNING MultipleShearSpring::setDomain() - Nd2: "
	     << connec


ant' builtin function

T is AbstractFloat, f32, or f16
@const determinant(e: matCxC<T> ) -> T
Returns the determinant of e.
`;

import { makeTestGroup } from '../../../../../../common/framework/test_group.js';
import { GPUTest } from '../../../../../gpu_test.js';
import { TypeF32, TypeMat } from '../../../../../util/conversion.js';
import { FP } from '../../../../../util/floating_point.js';
import { makeCaseCache } from '../../case_cache.js';
import { allInputSources, run } from '../../expression.js';

import { builtin } from './builtin.js';

export const g = makeTestGroup(GPUTest);

// Accuracy for determinant is only defined for e, where e is an integer and
// |e| < quadroot(2**21) [~38],
// due to computational complexity of calculating the general solution for 4x4,
// so custom matrices are used.
//
// Note: For 2x2 and 3x3 the limits are squareroot and cuberoot instead of
// quadroot, but using the tighter 4x4 limits for all cases for simplicity.
const kDeterminantValues = [-38, -10, -5, -1, 0, 1, 5, 10, 38];

const kDeterminantMatrixF32Values = {
  2: kDeterminantValues.map((f, idx) => [
    [idx % 4 === 0 ? f : idx, idx % 4 === 1 ? f : -idx],
    [idx % 4 === 2 ? f : -idx, idx % 4 === 3 ? f : idx],
  ]),
  3: kDeterminantValues.map((f, idx) => [
    [idx % 9 === 0 ? f : idx, idx % 9 === 1 ? f : -idx, idx % 9 === 2 ? f : idx],
    [idx % 9 === 3 ? f : -idx, idx % 9 === 4 ? f : idx, idx % 9 === 5 ? f : -idx],
    [idx % 9 === 6 ? f : idx, idx % 9 === 7 ? f : -idx, idx % 9 === 8 ? f : idx],
  ]),
  4: kDeterminantValues.map((f, idx) => [
    [
      idx % 16 === 0 ? f : idx,
      idx % 16 === 1 ? f : -idx,
      idx % 16 === 2 ? f : idx,
      idx % 16 === 3 ? f : -idx,
    ],
    [
      idx % 16 === 4 ? f : -idx,
      idx % 16 === 5 ? f : idx,
      idx % 16 === 6 ? f : -idx,
      idx % 16 === 7 ? f : idx,
    ],
    [
      idx % 16 === 8 ? f : idx,
      idx % 16 === 9 ? f : -idx,
      idx % 16 === 10 ? f : idx,
      idx % 16 === 11 ? f : -idx,
    ],
    [
      idx % 16 === 12 ? f : -idx,
      idx % 16 === 13 ? f : idx,
      idx % 16 === 14 ? f : -idx,
      idx % 16 === 15 ? f : idx,
    ],
  ]),
};

export const d = makeCaseCache('determinant', {
  f32_mat2x2_const: () => {
    return FP.f32.generateMatrixToScalarCases(
      kDeterminantMatrixF32Values[2],
      'finite',
      FP.f32.determinantInterval
    );
  },
  f32_mat2x2_non_const: () => {
    return FP.f32.generateMatrixToScalarCases(
      kDeterminantMatrixF32Values[2],
      'unfiltered',
      FP.f32.determinantInterval
    );
  },
  f32_mat3x3_const: () => {
    return FP.f32.generateMatrixToScalarCases(
      kDeterminantMatrixF32Values[3],
      'finite',
      FP.f32.determinantInterval
    );
  },
  f32_mat3x3_non_const: () => {
    return FP.f32.generateMatrixToScalarCases(
      kDeterminantMatrixF32Values[3],
      'unfiltered',
      FP.f32.determinantInterval
    );
  },
  f32_mat4x4_const: () => {
    return FP.f32.generateMatrixToScalarCases(


 := <-done:
		require.ErrorIs(t, err, updateError)
	case <-time.After(10 * time.Second):
		t.Fatal("Timed out waiting for update loop to terminate")
	}
}

func TestSessionTracker(t *testing.T) {
	t.Parallel()

	ctx := t.Context()

	clock := clockwork.NewFakeClock()

	mockService := &mockSessiontrackerService{
		trackers: make(map[string]types.SessionTracker),
	}

	sessID := "sessionID"
	trackerSpec := types.SessionTrackerSpecV1{
		Created:   clock.Now(),
		SessionID: sessID,
	}

	// Create a new session tracker
	tracker, err := NewSessionTracker(ctx, trackerSpec, mockService)
	require.NoError(t, err)
	require.NotNil(t, tracker)
	require.Equal(t, tracker.tracker, mockService.trackers[sessID])

	t.Run("UpdateExpirationLoop", func(t *testing.T) {
		cancelCtx, cancel := context.WithCancel(ctx)
		done := make(chan error)

		// Start update expiration goroutine
		go func() {
			done <- tracker.UpdateExpirationLoop(cancelCtx, clock)
		}()

		// wait until the ticker has been created
		clock.BlockUntil(1)

		// lock expiry and advance clock
		tracker.trackerCond.L.Lock()
		clock.Advance(sessionTrackerExpirationUpdateInterval)
		expectedExpiry := tracker.tracker.Expiry().Add(sessionTrackerExpirationUpdateInterval)

		// wait for expiration to get updated
		tracker.trackerCond.Wait()
		tracker.trackerCond.L.Unlock()
		require.Equal(t, expectedExpiry, tracker.tracker.Expiry())
		require.Equal(t, tracker.tracker, mockService.trackers[sessID])

		// canceling the goroutine's ctx should halt the update loop
		cancel()
		err := <-done
		require.NoError(t, err)
	})

	t.Run("State", func(t *testing.T) {
		stateUpdate := make(chan types.SessionState)
		go func() {
			stateUpdate <- tracker.WaitForStateUpdate(types.SessionState_SessionStatePending)
		}()

		err = tracker.UpdateState(ctx, types.SessionState_SessionStatePending)
		require.NoError(t, err)
		require.Equal(t, types.SessionState_SessionStatePending, tracker.GetState())
		require.Equal(t, tracker.tracker, mockService.trackers[sessID])

		err = tracker.UpdateState(ctx, types.SessionState_SessionStateRunning)
		require.NoError(t, err)
		require.Equal(t, types.SessionState_SessionStateRunning, tracker.GetState())
		require.Equal(t, tracker.tracker, mockService.trackers[sessID])

		// WaitForStateUpdate should ignore the pending update and then catch the running update
		require.Equal(t, types.SessionState_SessionStateRunning, <-stateUpdate)
	})

	t.Run("Participants", func(t *testing.T) {
		participantID := "userID"

		p := &types.Participant{ID: participantID}
		err = tracker.AddParticipant(ctx, p)
		require.NoError(t, err)
		require.Equal(t, []types.Participant{*p}, tracker.GetParticipants())
		require.Equal(t, tracker.tracker, mockService.trackers[sessID])

		err = tracker.RemoveParticipant(ctx, participantID)
		require.NoError(t, err)
		require.Empty(t, tracker.GetParticipants())
		require.Equal(t, tracker.tracker, mockService.trackers[sessID])
	})

	t.Run("Close", func(t *testing.T) {
		// Closing the tracker should update the state to terminated
		err = tracker.Close(ctx)
		require.NoError(t, err)
		require.Equal(t, types.SessionState_SessionStateTerminated, tracker.Get


));
    }
    ob_usleep(SLEEP_TS);
  }
}

void ObSafeDestroyTaskQueue::loop()
{
  int ret = OB_SUCCESS;
  if (REACH_TIME_INTERVAL(10 * 1000 * 1000)) {
    LOG_INFO("ObSafeDestroyTaskQueue::loop begin", K(queue_.size()));
  }
  ObSafeDestroyProcessFunctor fn;
  if (OB_FAIL(for_each(fn))) {
    LOG_WARN("loop failed", K(ret));
  }
  if (REACH_TIME_INTERVAL(10 * 1000 * 1000)) {
    LOG_INFO("ObSafeDestroyTaskQueue::loop finish", K(ret), K(queue_.size()));
  }
}

void ObSafeDestroyTaskQueue::destroy()
{
  queue_.destroy();
  stop_ = true;
  looping_ = false;
}

ObSafeDestroyHandler::ObSafeDestroyHandler()
  : is_inited_(false),
    queue_(),
    last_process_timestamp_(0)
{}

ObSafeDestroyHandler::~ObSafeDestroyHandler()
{
  destroy();
}

int ObSafeDestroyHandler::init()
{
	int ret = OB_SUCCESS;
  if (IS_INIT) {
    ret = OB_INIT_TWICE;
    LOG_WARN("safe destroy thread init twice.", K(ret));
  } else if (OB_FAIL(queue_.init())) {
    LOG_WARN("queue init failed", K(ret));
  } else {
    last_process_timestamp_ = ObTimeUtility::current_time();
    is_inited_ = true;
  }
  return ret;
}

int ObSafeDestroyHandler::start()
{
  int ret = OB_SUCCESS;
  if (IS_NOT_INIT) {
    ret = OB_NOT_INIT;
    LOG_WARN("safe destroy thread not inited", K(ret));
  } else {
    LOG_INFO("ObSafeDestroyHandler start");
  }
  return ret;
}

int ObSafeDestroyHandler::stop()
{
	int ret = OB_SUCCESS;
  if (IS_NOT_INIT) {
    ret = OB_NOT_INIT;
    LOG_WARN("safe destroy thread not inited", K(ret));
  } else {
    queue_.stop();
    // we only stop the queue to prevent push task into the queue.
    // the timer will be stop at the wait function.
    LOG_INFO("ObSafeDestroyHandler stopped");
  }
  return ret;
}

void ObSafeDestroyHandler::wait()
{
  int ret = OB_SUCCESS;
  static const int64_t SLEEP_TS = 100 * 1000; // 100_ms
  int64_t start_ts = ObTimeUtility::current_time();
  if (IS_NOT_INIT) {
    ret = OB_NOT_INIT;
    LOG_WARN("safe destroy thread not inited", K(ret));
  } else {
    while (!queue_.stop_finished()) {
      if (REACH_TIME_INTERVAL(60 * 1000 * 1000)) { // every minute
        LOG_WARN_RET(OB_ERR_TOO_MUCH_TIME, "the safe destroy thread wait cost too much time",
                     K(ObTimeUtility::current_time() - start_ts));
      }
      ob_usleep(SLEEP_TS);
    }
  }
}

void ObSafeDestroyHandler::destroy()
{
  LOG_INFO("ObSafeDestroyHandler::destroy");
  is_inited_ = false;
  last_process_timestamp_ = 0;
  queue_.destroy();
}

int ObSafeDestroyHandler::handle()
{
  int ret = OB_SUCCESS;
  if (IS_NOT_INIT) {
    ret = OB_NOT_INIT;
    LOG_WARN("safe destroy thread not inited", K(ret));
  } else {
    int64_t curr_time = ObTimeUtility::current_time();
    if (curr_time - last_process_timestamp_ >= TASK_SCHEDULER_INTERVAL) {
      LOG_INFO("ObSafeDestroyHandler start process");


0 39 73 67.5t114 28.5q121 0 216-68.5T1232 968t52-270q0-114-59.5-214T1052 321t-255-63q-105 0-196 29t-154.5 77-109 110.5-67 129.5T249 738q0 104 40 183t117 111q30 12 38-20 2-7 8-31t8-30q6-23-11-43-51-61-51-151 0-151 104.5-259.5T776 389q151 0 235.5 82t84.5 213q0 170-68.5 289T852 1092q-61 0-98-43.5T731 944q8-35 26.5-93.5t30-103T799 672q0-50-27-83t-77-33q-62 0-105 57t-43 142q0 73 25 122l-99 418q-17 70-13 177-206-91-333-281T0 768q0-209 103-385.5T382.5 103 768 0t385.5 103T1433 382.5 1536 768z"/></svg>';
  static const String pinterest_p =
      '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1280" height="1664" preserveAspectRatio="xMidYMid meet" viewBox="0 0 1280 1664"><path fill="currentColor" d="M0 597q0-108 37.5-203.5T141 227t152-123 185-78T680 0q158 0 294 66.5T1195 260t85 287q0 96-19 188t-60 177-100 149.5-145 103-189 38.5q-68 0-135-32t-96-88q-10 39-28 112.5t-23.5 95-20.5 71-26 71-32 62.5-46 77.5-62 86.5l-14 5-9-10q-15-157-15-188 0-92 21.5-206.5T348 972t52-203q-32-65-32-169 0-83 52-156t132-73q61 0 95 40.5T681 514q0 66-44 191t-44 187q0 63 45 104.5t109 41.5q55 0 102-25t78.5-68 56-95 38-110.5 20-111 6.5-99.5q0-173-109.5-269.5T653 163q-200 0-334 129.5T185 621q0 44 12.5 85t27 65 27 45.5T264 847q0 28-15 73t-37 45q-2 0-17-3-51-15-90.5-56t-61-94.5-32.5-108T0 597z"/></svg>';
  static const String pinterest_square =
      '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1536" height="1536" preserveAspectRatio="xMidYMid meet" viewBox="0 0 1536 1536"><path fill="currentColor" d="M1248 0q119 0 203.5 84.5T1536 288v960q0 119-84.5 203.5T1248 1536H523q85-122 108-210 9-34 53-209 21 39 73.5 67t112.5 28q181 0 295.5-147.5T1280 691q0-84-35-162.5t-96.5-139-152.5-97T799 256q-104 0-194.5 28.5t-153 76.5T344 470.5t-66.5 128T256 731q0 102 39.5 180T412 1021q13 5 23.5 0t14.5-19q10-44 15-61 6-23-11-42-50-62-50-150 0-150 103.5-256.5T778 386q149 0 232.5 81t83.5 210q


-3ypCTDKd",columnValue:"columnValue-Xr4j0qyI"}},kQXJ:function(e,t,n){e.exports={footer:"footer-2Zoji8zg"}},kgsH:function(e,t,n){e.exports={header:"header-dpl-vtN_",close:"close-3kPn4OTV"}},uo4K:function(e,t){e.exports='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 13 13" width="13" height="13"><path fill="currentColor" d="M5.18 6.6L1.3 2.7.6 2 2 .59l.7.7 3.9 3.9 3.89-3.9.7-.7L12.61 2l-.71.7L8 6.6l3.89 3.89.7.7-1.4 1.42-.71-.71L6.58 8 2.72 11.9l-.71.7-1.41-1.4.7-.71 3.9-3.9z"/></svg>'},w3Pp:function(e,t,n){"use strict";n.r(t),n.d(t,"marketType",(function(){return a}));n("YFKU"),n("HbRj");var r=new Map,o={context:"market_type"},i={cfd:window.t("cfd",o),bitcoin:window.t("crypto",o),crypto:window.t("crypto",o),dr:window.t("dr",o),forex:window.t("forex",o),futures:window.t("futures",o),index:window.t("index",o),stock:window.t("stock",o)};function a(e,t){var n=e+"_"+t,a=r.get(n);if(void 0!==a)return a;var l=t?window.t("{market_type} cfd",o).format({market_type:e}):i[e];return r.set(n,l),l}},"ycI/":function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var r=n("mrSG"),o=n("q1tI"),i=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._handleKeyDown=function(e){e.keyCode===t.props.keyCode&&t.props.handler(e)},t}return Object(r.__extends)(t,e),t.prototype.componentDidMount=function(){document.addEventListener(this.props.eventType||"keydown",this._handleKeyDown,!1)},t.prototype.componentWillUnmount=function(){document.removeEventListener(this.props.eventType||"keydown",this._handleKeyDown,!1)},t.prototype.render=function(){return null},t}(o.PureComponent)}}]);(window.webpackJsonp=window.webpackJsonp||[]).push([["vendors"],{"/82Z":function(e,t,n){var r,o,i;o=[n("P5fv"),n("Qwlt")],void 0===(i="function"==typeof(r=function(e){var t,n=e;return e.effects={effect:{}},function(e,t){var n,r=/^([\-+])=\s*(\d+\.?\d*)/,o=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[e[1],e[2],e[3],e[4]]}


ternate: false;

  $values: ($transparent 0, if($alternate, $color, $alt-color) 0);

  @for $i from 1 to $grid-columns*2 {
    @if is-even($i) {
      $values: append($values, $transparent $column-offset, comma);
      $values: append($values, if($alternate, $color, $alt-color) $column-offset, comma);
      $column-offset: $column-offset + $column-width;
    } @else {
      $values: append($values, if($alternate, $color, $alt-color) $column-offset, comma);
      $values: append($values, $transparent $column-offset, comma);
      $column-offset: $column-offset + $gutter-width;

      $alternate: not $alternate;
    }
  }

  @return $values;
}

// Layout direction
@function get-direction($layout, $default) {
  $direction: null;

  @if to-upper-case($layout) == "LTR" or to-upper-case($layout) == "RTL" {
    $direction: direction-from-layout($layout);
  } @else {
    $direction: direction-from-layout($default);
  }

  @return $direction;
}

@function direction-from-layout($layout) {
  $direction: null;

  @if to-upper-case($layout) == "LTR" {
    $direction: right;
  } @else {
    $direction: left;
  }

  @return $direction;
}

@function get-opposite-direction($direction) {
  $opposite-direction: left;

  @if $direction == "left" {
    $opposite-direction: right;
  }

  @return $opposite-direction;
}

@function to-number($string) {
  $string: str-replace($string, " ", "");
  $strings: "0" "1" "2" "3" "4" "5" "6" "7" "8" "9";
  $numbers:  0 1 2 3 4 5 6 7 8 9;
  $result: 0;

  @for $i from 1 through str-length($string) {
    $character: str-slice($string, $i, $i);
    $index: index($strings, $character);

    @if not $index {
      @warn "Unknown character `#{$character}`.";
      @return false;
    }

    $number: nth($numbers, $index);
    $result: $result * 10 + $number;
  }

  @return $result;
}

@function str-replace($string, $search, $replace: "") {
  $index: str-index($string, $search);

  @if $index {
    $first: str-slice($string, 1, $index - 1);
    $last-slice: str-slice($string, $index + str-length($search));
    $last: str-replace($last-slice, $search, $replace);
    @return $first + $replace + $last;
  }

  @return $string;
}
/*
Theme Name: Pulitzer
Text Domain: pulitzer
Version: 1.0.3
Description: Pulitzer is a minimal blog theme designed for writers, with special consideration for newsletters. It features a reading time indicator, four different archive layouts to choose from, complete page patterns for your resume, newsletter, contact page, and archive, like and share buttons on single posts, and a newsletter subscribe form in the footer. The like/share buttons and subscribe form require the Jetpack plugin to be active and the Subscription feature to be enabled. Demo: https://pulitzer.andersnoren.se
Tags: one-column, custom-colors, custom-menu, custom-logo, editor-style, featured-images, full-site-editing, block-patterns, sticky-post, threaded-comments, translation-ready, wide-blocks, block-styles,


 to 2, 3 to 6, 10 to 20)

        assertEquals(null, map.higherKey(100))
        assertEquals(null, map.higherKey(10))
        assertEquals(10, map.higherKey(3))
        assertEquals(3, map.higherKey(2))
        assertEquals(1, map.higherKey(0))

        assertEquals(null, map.higherValue(100))
        assertEquals(null, map.higherValue(10))
        assertEquals(20, map.higherValue(3))
        assertEquals(6, map.higherValue(2))
        assertEquals(2, map.higherValue(0))
    }

    @Test
    fun `test floor entry`() {
        val map = makeMap(1 to 2, 3 to 6, 10 to 20)

        assertEquals(10, map.floorKey(100))
        assertEquals(10, map.floorKey(10))
        assertEquals(1, map.floorKey(2))
        assertEquals(1, map.floorKey(1))
        assertEquals(null, map.floorKey(0))

        assertEquals(20, map.floorValue(100))
        assertEquals(20, map.floorValue(10))
        assertEquals(2, map.floorValue(2))
        assertEquals(2, map.floorValue(1))
        assertEquals(null, map.floorValue(0))
    }

    @Test
    fun `test ceiling entry`() {
        val map = makeMap(1 to 2, 3 to 6, 10 to 20)

        assertEquals(null, map.ceilingKey(100))
        assertEquals(10, map.ceilingKey(10))
        assertEquals(3, map.ceilingKey(3))
        assertEquals(3, map.ceilingKey(2))
        assertEquals(1, map.ceilingKey(0))

        assertEquals(null, map.ceilingValue(100))
        assertEquals(20, map.ceilingValue(10))
        assertEquals(6, map.ceilingValue(3))
        assertEquals(6, map.ceilingValue(2))
        assertEquals(2, map.ceilingValue(0))
    }

    private fun makeMap(vararg ints: Int): SortedMap<Int, Int> {
        val map = SortedMap<Int, Int>()
        ints.forEach { map[it] = it }
        return map
    }

    private fun makeMap(vararg ints: Pair<Int, Int>): SortedMap<Int, Int> {
        val map = SortedMap<Int, Int>()
        ints.forEach { (k, v) -> map[k] = v }
        return map
    }
}package de.fabmax.kool.platform

import android.opengl.GLSurfaceView
import de.fabmax.kool.KoolConfigAndroid
import de.fabmax.kool.KoolContext
import de.fabmax.kool.KoolSystem
import de.fabmax.kool.math.clamp
import de.fabmax.kool.pipeline.backend.gl.RenderBackendGlImpl
import de.fabmax.kool.util.*
import kotlinx.coroutines.runBlocking
import java.util.*

typealias AndroidLog = android.util.Log

class KoolContextAndroid(config: KoolConfigAndroid) : KoolContext() {

    override val backend: RenderBackendGlImpl
    override val window: AndroidWindow
    val surfaceView: GLSurfaceView get() = window.surfaceView

    private val sysInfo = SysInfo()

    init {
        check(!KoolSystem.isContextCreated) { "KoolContext was already created" }

        backend = RenderBackendGlImpl(this)
        window = AndroidWindow(this, config)
        KoolSystem.onContextCreated(this)
    }

    fun onPause() {
        surfaceView.onPause()
    }

    fun onResume() {
        surfaceView.onResume()
    }

    fun onDestroy() {
        onShutdown.updated().forEach { it(this) }
    }

    override fun openUrl(url: String, sameWindow: Boolean) {
        logE { "Open URL: $url" }
    }

    override fun run() { }

    override fun getSysInfos(): List<String> {
        return sysInfo.lines
    }

    internal fun renderFrame() = runBlocking {
        sysInfo.update()

        // setup draw


 191*/
	/* SDK END */
	short PKG_ADDIN5 = 0x3F00;		/* Overlaps PKG_EDIT_ERR3 intentionally */
	/* (see comments in PKG_ADDIN3) */
	short PKG_BCASE2 = 0x3FC0;		/* PKG_BCASE2 Briefcase codes are limited to 0 - 47 */
	short PKG_SECURE3 = 0x3FF0;		/* PKG_SECURE3 Security3 codes are limited to 0 - 15 */
	/* SDK BEGIN */
	/*	3F00 IS THE LAST PACKAGE THAT CAN BE DEFINED FOR ERROR CODES!
	 *  (LOOK FOR HOLES ABOVE).  THE RANGE 0x4000-0x7FFF CANNOT BE USED.
	 */

	/* SDK END */
	/*  THE RANGE 0x8000-0xBFFF CANNOT BE USED FOR ERROR CODES OR BLOCK CODES,
	 *  BUT CAN BE USED FOR STRING CODES (FOR UI, ETC) BECAUSE AS LONG AS
	 *  THE CODE DOES NOT NEED TO PARTICIPATE IN STS_DISPLAYED OR
	 *  STS_REMOTE MANAGEMENT, THAT IS, IT IS NEVER TREATED AS AN ERROR CODE.
	 *  NOTE THAT IF WE NEED 0xC000-0xFFFF, WE WILL HAVE TO CHANGE HOW
	 *  HELP LINES ARE MANAGED.
	 */

	/* Package defines below this line cannot be used for error codes,
	 * only for non-error string resources.  These packages are outside
	 * of the SDK because the SDK should not need them.
	 */

	short PKG_DESK_STR = (short) 0x8000;
	short PKG_DESK_STR2 = (short) 0x8100;
	short PKG_DESK_STR3 = (short) 0x8200;
	short PKG_DESK_STR4 = (short) 0x8300;
	short PKG_EDIT_STR = (short) 0x8400;
	short PKG_EDIT_STR2 = (short) 0x8500;
	short PKG_VIEW_STR = (short) 0x8600;
	short PKG_VIEW_STR2 = (short) 0x8700;
	short PKG_NEM_STR = (short) 0x8800;
	short PKG_WMISC_STR = (short) 0x8900;		/* limited 0-63 */
	short PKG_CTRY_STR = (short) 0x8940;		/* country name strings limited 0-63 */
	short PKG_ADMIN_STR2 = (short) 0x8980;		/* more Admin limited to 0-127 */
	short PKG_COMPILER_STR = (short) 0x8A00;
	short PKG_COMPILER_STR2 = (short) 0x8B00;
	short PKG_COMPILER_STR3 = (short) 0x8C00;
	short PKG_COMPILER_STR4 = (short) 0x8D00;
	short PKG_IXMETHOD = (short) 0x8E00;		/* import/export methods for notes.ini */
	short PKG_ASSISTANT_STR = (short) 0x8F00;
	short PKG_ADMIN_STR = (short) 0x9000;		/* Admin package */
	short PKG_DESK_STR5 = (short) 0x9100;		/* desk string codes, limit to 0 - 255 */
	short PKG_SUBZONE_STR = (short) 0x9200;		/* Time zone - subzone strings limited to 0 - 127 */
	short PKG_PRINT_STR = (short) 0x9280;		/* Client Prshort (calendar, doc, view, ...) 0-127  */
	short PKG_TOOLBAR_STR = (short) 0x9300;		/* Rnext Toolbar non error strings 0 - 255 */
	short PKG_ACTIONPANE_STR = (short) 0x9400;		/* Action pane non error strings 0 - 127 */
	short PKG_ADMIN_STR3 = (short) 0x9480;		/* more Admin limi


You must select a character to login!"] = "Du musst einen Charakter auswhlen!",
    ["You must select a reason."] = "Du musst einen Grund auswhlen.",
    ["You must select an action."] = "Du musst eine Aktion auswhlen.",
    ["You read the following, written by \n%s\n"] = "Du liest das Folgende, geschrieben von \n%s\n",
    ["You read the following, written on \n%s.\n"] = "Du liest das Folgende, geschrieben am \n%s.\n",
    ["You will not gain 50%% more experience because you aren't premium player, now you receive only 1x experience points"] = false,
    ["Your Capacity"] = "Deine Belastbarkeit",
    ["Your Capacity:"] = "Deine Belastbarkeit:",
    ["Your Money"] = "Dein


intern("A");
///
///     assert_eq!(a, a);
///
///     let c = intern("B");
///
///     assert_ne!(a, c);
///     assert_ne!(b, c);
///
///     // Prints "A"
///     println!("{}", a);
///
///     let str_a = resolve(a);
///
///     assert_eq!(str_a, "A");
/// }
/// ```
#[derive(Copy, Clone, Eq, Hash, Ord, PartialEq)]
pub struct Symbol(usize);

impl Interner {
    /// Store `string` in this interner if not already cached.
    fn intern<S: AsRef<str>>(&mut self, string: S) -> Symbol {
        let string = string.as_ref();
        match self.index.get(string) {
        | Some(&index) => Symbol(index),
        | None => {
            let owned = string.to_owned().into_boxed_str();
            let leaked = Box::leak(owned);
            let index = self.store.len();
            self.store.push(leaked);
            self.index.insert(leaked, index);
            Symbol(index)
        }
        }
    }

    /// Store static `string` (without leaking memory) in this interner if
    /// not already cached.
    fn intern_static(&mut self, string: &'static str) -> Symbol {
        match self.index.get(string) {
        | Some(&index) => Symbol(index),
        | None => {
            let index = self.store.len();
            self.store.push(string);
            self.index.insert(string, index);
            Symbol(index)
        }
        }
    }

    /// Resolve `symbol` in this interner.
    ///
    /// Panics if `symbol` was produced by this interner.
    fn resolve(&self, symbol: Symbol) -> &'static str {
        self.store[symbol.0]
    }
}

/// Look up `string` in the global cache, and insert it if missing.
pub fn intern<S: AsRef<str>>(string: S) -> Symbol {
    INTERNER.write()
        .expect("[INTERNAL ERROR]: poisoned global interner lock")
        .intern(string)
}

/// Look up static `string` in the global cache, and insert it without allocating
/// if it is missing.
pub fn intern_static(string: &'static str) -> Symbol {
    INTERNER.write()
        .expect("[INTERNAL ERROR]: poisoned global interner lock")
        .intern_static(string)
}

/// Resolve `symbol` to its string representation.
pub fn resolve(symbol: Symbol) -> &'static str {
    INTERNER.read()
        .expect("[INTERNAL ERROR]: poisoned global interner lock")
        .resolve(symbol)
}

impl From<Symbol> for &'static str {
    fn from(symbol: Symbol) -> Self {
        resolve(symbol)
    }
}

impl str::FromStr for Symbol {
    type Err = ();
    fn from_str(s: &str) -> Result<Self, Self::Err> {
        Ok(intern(s))
    }
}

impl cmp::PartialOrd for Symbol {
    fn partial_cmp(&self, other: &Self) -> Option<cmp::Ordering> {
        resolve(*self).partial_cmp(resolve(*other))
    }
}

impl fmt::Debug for Symbol {
    fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
        write!(fmt, "{:?}", resolve(*self))
    }
}

impl fmt::Display for Symbol {
    fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
        write!(fmt, "{}", resolve(*self))
    }
}

#[cfg(test)]
mod tests {

    use super::{intern, resolve};

    #[test]
    fn test_same() {
        let symbol_a = intern("String");
        let symbol_b = intern("String");
        assert_eq!(symbol_


 similarly the width dimension.
output: 4-D with shape `[batch, orig_height, orig_width, channels]`. Gradients
  with respect to the input image.
)doc");

// --------------------------------------------------------------------------
REGISTER_OP("RandomCrop")
    .Input("image: T")
    .Input("size: int64")
    .Output("output: T")
    .Attr("T: {uint8, int8, int16, int32, int64, float, double}")
    .Attr("seed: int = 0")
    .Attr("seed2: int = 0")
    .SetIsStateful()
    .Deprecated(8, "Random crop is now pure Python")
    .SetShapeFn([](InferenceContext* c) {
      ShapeHandle image;
      TF_RETURN_IF_ERROR(c->WithRank(c->input(0), 3, &image));
      DimensionHandle channels = c->Dim(image, -1);

      ShapeHandle unused;
      TF_RETURN_IF_ERROR(c->Merge(c->input(1), c->Vector(2), &unused));

      const Tensor* size = c->input_tensor(1);
      DimensionHandle h;
      DimensionHandle w;
      if (size == nullptr) {
        h = c->UnknownDim();
        w = c->UnknownDim();
      } else {
        auto size_vec = size->vec<int64>();
        h = c->MakeDim(size_vec(0));
        w = c->MakeDim(size_vec(1));
      }
      c->set_output(0, c->MakeShape({h, w, channels}));
      return Status::OK();
    })
    .Doc(R"doc(
Randomly crop `image`.

`size` is a 1-D int64 tensor with 2 elements representing the crop height and
width.  The values must be non negative.

This Op picks a random location in `image` and crops a `height` by `width`
rectangle from that location.  The random location is picked so the cropped
area will fit inside the original image.

image: 3-D of shape `[height, width, channels]`.
size: 1-D of length 2 containing: `crop_height`, `crop_width`..
seed: If either seed or seed2 are set to be non-zero, the random number
  generator is seeded by the given seed.  Otherwise, it is seeded by a
  random seed.
seed2: An second seed to avoid seed collision.
output: 3-D of shape `[crop_height, crop_width, channels].`
)doc");
// TODO(shlens): Support variable rank in RandomCrop.

// --------------------------------------------------------------------------
REGISTER_OP("DecodeJpeg")
    .Input("contents: string")
    .Attr("channels: int = 0")
    .Attr("ratio: int = 1")
    .Attr("fancy_upscaling: bool = true")
    .Attr("try_recover_truncated: bool = false")
    .Attr("acceptable_fraction: float = 1.0")
    .Attr("dct_method: string = ''")
    .Output("image: uint8")
    .SetShapeFn(DecodeImageShapeFn)
    .Doc(strings::StrCat(R"doc(
Decode a JPEG-encoded image to a uint8 tensor.
)doc",
                         kDecodeJpegCommonDocStr, R"doc(
This op also supports decoding PNGs and non-animated GIFs since the interface is
the same, though it is cleaner to use `tf.image.decode_image`.

contents: 0-D.  The JPEG-encoded image.
)doc",
                         kDecodeJpegCommonParamsDocStr));

// --------------------------------------------------------------------------
REGISTER_OP("DecodeAndCropJpeg")
    .Input("contents: string")
    .Input("crop_window: int32")
    .Attr("channels: int = 0")
    .Attr("ratio: int = 1")
    .Attr("fancy_upscaling: bool = true")
    .Attr("try_recover_truncated: bool = false")
    .Attr("acceptable_


"email"]:focus,
.ui.form input[type="number"]:focus,
.ui.form input[type="password"]:focus,
.ui.form input[type="search"]:focus,
.ui.form input[type="tel"]:focus,
.ui.form input[type="time"]:focus,
.ui.form input[type="text"]:focus,
.ui.form input[type="file"]:focus,
.ui.form input[type="url"]:focus {
  color: rgba(0, 0, 0, 0.95);
  border-color: #85B7D9;
  border-radius: 0.28571429rem;
  background: #FFFFFF;
  box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.35) inset;
}

.ui.form textarea:focus {
  color: rgba(0, 0, 0, 0.95);
  border-color: #85B7D9;
  border-radius: 0.28571429rem;
  background: #FFFFFF;
  box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.35) inset;
  -webkit-appearance: none;
}

/*--------------------
        Success
---------------------*/

/* On Form */

.ui.form.success .success.message:not(:empty) {
  display: block;
}

.ui.form.success .compact.success.message:not(:empty) {
  display: inline-block;
}

.ui.form.success .icon.success.message:not(:empty) {
  display: flex;
}

/*--------------------
        Warning
---------------------*/

/* On Form */

.ui.form.warning .warning.message:not(:empty) {
  display: block;
}

.ui.form.warning .compact.warning.message:not(:empty) {
  display: inline-block;
}

.ui.form.warning .icon.warning.message:not(:empty) {
  display: flex;
}

/*--------------------
        Error
---------------------*/

/* On Form */

.ui.form.error .error.message:not(:empty) {
  display: block;
}

.ui.form.error .compact.error.message:not(:empty) {
  display: inline-block;
}

.ui.form.error .icon.error.message:not(:empty) {
  display: flex;
}

/* On Field(s) */

.ui.form .fields.error .field label,
.ui.form .field.error label,
.ui.form .fields.error .field .input,
.ui.form .field.error .input {
  color: #9F3A38;
}

.ui.form .fields.error .field .corner.label,
.ui.form .field.error .corner.label {
  border-color: #9F3A38;
  color: #FFFFFF;
}

.ui.form .fields.error .field textarea,
.ui.form .fields.error .field select,
.ui.form .fields.error .field input:not([type]),
.ui.form .fields.error .field input[type="date"],
.ui.form .fields.error .field input[type="datetime-local"],
.ui.form .fields.error .field input[type="email"],
.ui.form .fields.error .field input[type="number"],
.ui.form .fields.error .field input[type="password"],
.ui.form .fields.error .field input[type="search"],
.ui.form .fields.error .field input[type="tel"],
.ui.form .fields.error .field input[type="time"],
.ui.form .fields.error .field input[type="text"],
.ui.form .fields.error .field input[type="file"],
.ui.form .fields.error .field input[type="url"],
.ui.form .field.error textarea,
.ui.form .field.error select,
.ui.form .field.error input:not([type]),
.ui.form .field.error input[type="date"],


# This is a script has multiple code blocks
# app.py

# Configs block
database_url = "example.com/db"
api_key = "your_api_key"
debug_mode = True
config_constant = 10

# Functions block
def add_config_constant(a:int)->int:
    return a + config_constant

# Prints and usage of the previous parameters and funcion blocks
print("Database URL:", database_url)
print("API Key:", api_key)
print("Debug Mode:", debug_mode)

result_add = add_config_constant(5)
print("Add config Result:", result_add)


push_back( idVec3( obj[0], obj[1], obj[2] ) );
				if( 0 != acc.mSubOffset[2] || 0 != acc.mSubOffset[3] ) // hack ... consider cleaner solution
					pMesh->mNumUVComponents[pInput.mIndex] = 3;
					*/
			}
			else
			{
				common->Error( "Collada: too many texture coordinate sets. Skipping." );
			}
			break;

		case IT_Color:
			// up to 4 color sets are fine, ignore the others
			if( pInput.mIndex < 1 )
			{
				// pad to current vertex count if necessary
				if( pMesh->mColors.Num() < pMesh->mPositions.Num() - 1 )
				{
					int numMissing = pMesh->mPositions.Num() - pMesh->mColors.Num() - 1;

					for( int i = 0; i < numMissing; i++ )
					{
						pMesh->mColors.Append( PackColor( idVec4( 0, 0, 0, 1 ) ) );
					}
				}

				pMesh->mColors.Append( PackColor( idVec4( obj[0], obj[1], obj[2], obj[3] ) ) );

				/*
				if( pMesh->mColors[pInput.mIndex].size() < pMesh->mPositions.size() - 1 )
					pMesh->mColors[pInput.mIndex].insert( pMesh->mColors[pInput.mIndex].end(),
														  pMesh->mPositions.size() - pMesh->mColors[pInput.mIndex].size() - 1, idVec4( 0, 0, 0, 1 ) );

				pMesh->mColors[pInput.mIndex].push_back( idVec4( obj[0], obj[1], obj[2], obj[3] ) );
				*/
			}
			else
			{
				common->Error( "Collada: too many vertex color sets. Skipping." );
			}

			break;

		default:
			// IT_Invalid and IT_Vertex
			assert( false && "shouldn't ever get here" );
	}
}

// ------------------------------------------------------------------------------------------------
// Reads the library of node hierarchies and scene parts
void ColladaParser::ReadSceneLibrary()
{
	if( mReader->isEmptyElement() )
	{
		return;
	}

	while( mReader->read() )
	{
		if( mReader->getNodeType() == irr::io::EXN_ELEMENT )
		{
			// a visual scene - generate root node under its ID and let ReadNode() do the recursive work
			if( IsElement( "visual_scene" ) )
			{
				// read ID. Is optional according to the spec, but how on earth should a scene_instance refer to it then?
				int indexID = GetAttribute( "id" );
				const char* attrID = mReader->getAttributeValue( indexID );

				// read name if given.
				int indexName = TestAttribute( "name" );
				const char* attrName = "unnamed";
				if( indexName > -1 )
				{
					attrName = mReader->getAttributeValue( indexName );
				}

				// create a node and store it in the library under its ID
				Node* node = new Node;
				node->mID = attrID;
				node->mName = attrName;

				mNodeLibrary.Set( node->mID, node );

				ReadSceneNode( node );
			}
			else
			{
				// ignore the rest
				SkipElement();
			}
		}
		else if( mReader->getNodeType() == irr::io::EXN_ELEMENT_END )
		{
			if( strcmp( mReader->getNodeName(), "library_visual_scenes" ) == 0 )
				//ThrowException( "Expected end of \"library_visual_scenes\" element.");

			{
				break;
			}
		}
	}
}

// ------------------------------------------------------------------------------------------------
// Reads a scene node's contents including children and stores it in the given node
void


城。藥劑師金格正在那裏等著妳向他進行回報。"}, {"把實驗工具包帶給幽暗城的藥劑師金格。"}},
[865] = {"迅猛龍角", {"貧瘠之地的迅猛龍比其它地區的更加聰明狡猾，我想它們的智慧就來自它們的角！如果是這樣的話，我可以將它們的角磨成粉末，制成“智慧飲料”，然後就能賣個大價錢！！！","我想妳應該能幫我的忙……從赤鱗鐮爪龍身上弄壹些完整的迅猛龍角來，它們就棲息在貧瘠之地的南部以及靠近灰谷森林邊界的貧瘠之地北部。"}, {"從赤鱗鐮爪龍身上收集5根完整的迅猛龍角，把它們交給棘齒城的米希瑞克斯。"}},
[866] = {"根須樣本", {"貧瘠之地的草藥似乎和其它地方的不大壹樣。它們的屬性幾乎相同，不過這裏的綠洲之水卻令它們發生了壹些改變，使它們變得有那麽壹點點特別了。","我想找出這些草藥到底有什麽特別之處……然後看看它們有沒有利用價值！","如果妳精通草藥的話，就幫我在貧瘠之地收集壹些這種草藥的根須樣本吧。把這些樣本交給我，這樣壹來，我就能比較壹下它們與其它地區的草藥之間的差異了。"}, {"把根須樣本交給棘齒城的麥伯克·米希瑞克斯。"}},
[867] = {"鷹身強盜", {"這些該死的鷹身人長期以來不停地攻擊和掠奪我們的補給商隊。現在我們要給她們壹點顏色看看了：我們要割斷她們的喉嚨，削減她們的數量。","我壹直在她們的巢穴附近細心觀察，而且已經確定了誰是她們的領導者。我們應該首先以削弱她們的基礎作戰力量為目標，這樣才能徹底擊敗她們。","慢慢來，先去幹掉那些在西北方出沒的巫翼鷹身人和巫翼遊蕩者，然後給我帶8只巫翼鷹身人的爪子回來吧。這應該是壹個不錯的開始……"}, {"收集8


0;z-index:1080}
.io{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}
.avatar{background:#888;border-radius: 100%;-ms-flex-pack: center;justify-content: center;-ms-flex-align: center;align-items: center;-ms-flex-negative: 0;flex-shrink: 0;overflow: hidden;}
.disabled{pointer-events:none;filter:grayscale(100%);-webkit-filter:grayscale(100%);-moz-filter:grayscale(100%);-ms-filter:grayscale(100%);-o-filter:grayscale(100%);filter:url("data:image/svg+xml;utf8,#grayscale");filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);-webkit-filter:grayscale(1)}
@media (min-width:1920px){.content-site{max-width:1900px}
}
@media (min-width:768px){.content-site{padding:0 30px}
}
/*--------------------------------------------------------------
## WordPress Basics style
--------------------------------------------------------------*/
.alignnone{margin:5px 20px 20px 0}
.aligncenter,div.aligncenter{display:block;margin:5px auto 5px auto}
.alignright{float:right;margin:5px 0 20px 20px}
.alignleft{float:left;margin:5px 20px 20px 0}
a img.alignright{float:right;margin:5px 0 20px 20px}
a img.alignnone{margin:5px 20px 20px 0}
a img.alignleft{float:left;margin:5px 20px 20px 0}
a img.aligncenter{display:block;margin-left:auto;margin-right:auto}
.wp-caption{background:#fff;border:1px solid #f0f0f0;max-width:96%;padding:5px 3px 10px;text-align:center}
.wp-caption.alignnone{margin:5px 20px 20px 0}
.wp-caption.alignleft{margin:5px 20px 20px 0}
.wp-caption.alignright{margin:5px 0 20px 20px}
.wp-caption img{border:0 none;height:auto;margin:0;max-width:98.5%;padding:0;width:auto}
.wp-caption p.wp-caption-text{font-size:11px;line-height:17px;margin:0;padding:0 4px 5px}
.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute!important;width:1px;word-wrap:normal!important}
.screen-reader-text:focus{background-color:#eee;clip:auto!important;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}

/*--------------------------------------------------------------
## Sidebar style
--------------------------------------------------------------*/
.sidebar-nav{position:fixed;display:table-cell;font-size:.875rem;width:220px;height:100vh;z-index:1081;opacity:1!important}
.sidebar-nav-inner{width:inherit;margin:0;max-width:170px;background:#2c2e2f;pointer-events:inherit;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;transition:background-color .3s}
.sidebar-nav .logo{line-height:74px;width:100%;text-align:center}
.sidebar-nav .logo