d transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:10px;padding-left:10px}.mce-rtl .mce-splitbtn .mce-open{padding-left:4px;padding-right:4px}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#e3e3e3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#59a5e1}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}@font-face{font-family:'icomoon';src:url('fonts/icomoon.eot');src:url('fonts/icomoon.eot?#iefix') format('embedded-opentype'),url('fonts/icomoon.svg#icomoon') format('svg'),url('fonts/icomoon.woff') format('woff'),url('fonts/icomoon.ttf') format('truetype');font-weight:normal;font-style:normal}@font-face{font-family:'icomoon-small';src:url('fonts/icomoon-small.eot');src:url('fonts/icomoon-small.eot?#iefix') format('embedded-opentype'),url('fonts/icomoon-small.svg#icomoon') format('svg'),url('fonts/icomoon-small.woff') format('woff'),url('fonts/icomoon-small.ttf') format('truetype');font-weight:normal;font-style:normal}.mce-ico{font-family:'icomoon';font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:text-top;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#333;-ie7-icon:' '}.mce-btn-small .m


36:not(.u-hover-box) > .u-container-layout {
  border-radius: 36px !important;
}
.u-radius-37,
.u-radius-37:before,
.u-radius-37 .u-background-effect,
.u-radius-37:not(.u-hover-box) > .u-container-layout {
  border-radius: 37px !important;
}
.u-radius-38,
.u-radius-38:before,
.u-radius-38 .u-background-effect,
.u-radius-38:not(.u-hover-box) > .u-container-layout {
  border-radius: 38px !important;
}
.u-radius-39,
.u-radius-39:before,
.u-radius-39 .u-background-effect,
.u-radius-39:not(.u-hover-box) > .u-container-layout {
  border-radius: 39px !important;
}
.u-radius-40,
.u-radius-40:before,
.u-radius-40 .u-background-effect,
.u-radius-40:not(.u-hover-box) > .u-container-layout {
  border-radius: 40px !important;
}
.u-radius-41,
.u-radius-41:before,
.u-radius-41 .u-background-effect,
.u-radius-41:not(.u-hover-box) > .u-container-layout {
  border-radius: 41px !important;
}
.u-radius-42,
.u-radius-42:before,
.u-radius-42 .u-background-effect,
.u-radius-42:not(.u-hover-box) > .u-container-layout {
  border-radius: 42px !important;
}
.u-radius-43,
.u-radius-43:before,
.u-radius-43 .u-background-effect,
.u-radius-43:not(.u-hover-box) > .u-container-layout {
  border-radius: 43px !important;
}
.u-radius-44,
.u-radius-44:before,
.u-radius-44 .u-background-effect,
.u-radius-44:not(.u-hover-box) > .u-container-layout {
  border-radius: 44px !important;
}
.u-radius-45,
.u-radius-45:before,
.u-radius-45 .u-background-effect,
.u-radius-45:not(.u-hover-box) > .u-container-layout {
  border-radius: 45px !important;
}
.u-radius-46,
.u-radius-46:before,
.u-radius-46 .u-background-effect,
.u-radius-46:not(.u-hover-box) > .u-container-layout {
  border-radius: 46px !important;
}
.u-radius-47,
.u-radius-47:before,
.u-radius-47 .u-background-effect,
.u-radius-47:not(.u-hover-box) > .u-container-layout {
  border-radius: 47px !important;
}
.u-radius-48,
.u-radius-48:before,
.u-radius-48 .u-background-effect,
.u-radius-48:not(.u-hover-box) > .u-container-layout {
  border-radius: 48px !important;
}
.u-radius-49,
.u-radius-49:before,
.u-radius-49 .u-background-effect,
.u-radius-49:not(.u-hover-box) > .u-container-layout {
  border-radius: 49px !important;
}
.u-radius-50,
.u-radius-50:before,
.u-radius-50 .u-background-effect,
.u-radius-50:not(.u-hover-box) > .u-container-layout {
  border-radius: 50px !important;
}
/*begin-v


(rRrrr.rrrrrNrrrr6)r3rrrs   r5r6AutoLocator.__init__d6
<<01E!EE&E
u2r9rSrZr[r\r]rr6r^r	)rs@r5r!r!\33r9r!c.\rSrSrSrSSjrSrSrSrg)	r$r
Place evenly spaced minor ticks, with the step size and maximum number of ticks
chosen automatically.

The Axis must use a linear scale and have evenly spaced major ticks.
NcXlg)
Parameters
----------
n : int or 'auto', default: :rc:`xtick.minor.ndivs` or :rc:`ytick.minor.ndivs`
    The number of subdivisions of the interval between major ticks;
    e.g., n=2 will place a single minor tick midway between major ticks.

    If *n* is 'auto', it will be set to 4 or 5: if the distance
    between the major ticks equals 1, 2.5, 5 or 10 it can be perfectly
    divided in 5 equidistant sub-intervals with a length multiple of
    0.05; otherwise, it is divided in 4 sub-intervals.
Nndivs)r3rs  r5r6AutoMinorLocator.__init__z
r9cRURR5S:Xa[R"S5 /$[R
"URR
55n[U5S:a/$USUS-
nURc4[RURRS:XaSOSUlURS	:XaMS
[R"U5S--n[R"U/SQ5R5(aSOS
nOURnX$-n[URR!55upgUSn[#Xh-
U-5n	[#Xx-
U-5S-n
[R$"X5U-U-nUR'U5$)NrG4AutoMinorLocator does not work on logarithmic scalesrr.rr+ytick.minor.ndivsxtick.minor.ndivsrrr.rrrrrrd	get_scalerrruniqueget_majorticklocsrrrr	axis_namerrrrr<rrJr)r3	majorlocs	majorstepmajorstep_mantissar	minorstepr@rAt0tmintmaxrs            r5rzAutoMinorLocator.__call__i99 E)UVIIIdii99;<	y>AIaL9Q</	::'+yy':':c'A#(*DJ::!#(;a(?!@$6HLLNNATUEJJE%	DII779:

q\di9,-di9,-1		$%	1R7$$T**r9cD[S[U5R35e)N Cannot get tick locations for a rwrrZ)r3r@rAs   r5rAutoMinorLocator.tick_values&!.tDz/B/B.CDF	Fr9rr	rZr[r\r]rr6rzrr^rSr9r5r$r$r
!+FFr9r$r.r:rrloggingrbrnumbersrstringnumpyrrrrrr
rb	getLoggerrZr__all__r)rr
rrrrrrrrrrrrrrrrrrrr"rmrMr#rrrrrrar r%r&r'r!r$rSr9r5<module>rBH

"0"	D8--=
=
@I!Y!D!I!80	M&**	MDD8E>iE>PN9Nb<,J<,J^
32
3 A"YA"HH+?H+Vkyk\W3jW3tA7A:*,7*,Z'(N3GN3bC3gC3L,,^Z'Zz4
787%wwtW3GW3tYT7YTxO;Od3+3,<Fw<Fr9


# Copyright (c) 2014 VMware, Inc.
# All Rights Reserved.
#
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
#    not use this file except in compliance with the License. You may obtain
#    a copy of the License at
#
#         http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
#    License for the specific language governing permissions and limitations
#    under the License.

"""
Shared constants across the VMware ecosystem.
"""

# Datacenter path for HTTP access to datastores if the target server is an ESX/
# ESXi system: http://goo.gl/B5Htr8 for more information.
ESX_DATACENTER_PATH = 'ha-datacenter'

# User Agent for HTTP requests between OpenStack and vCenter.
USER_AGENT = 'OpenStack-ESX-Adapter'

# Key of the cookie header when using a SOAP session.
SOAP_COOKIE_KEY = 'vmware_soap_session'

# Key of the cookie header when using a CGI session.
CGI_COOKIE_KEY = 'vmware_cgi_ticket'


ord 0x01c1
    4b5a:	60 d0       	mov.b	@r13,r0
    4b5c:	48 e7       	ldc.l	@r8+,r6_bank
    4b5e:	c0 00       	mov.b	r0,@(0,gbr)
    4b60:	b2 00       	bsr	4f64 <_sddrv_129i+0x4f64>
    4b62:	64 00       	mov.b	@r0,r4
    4b64:	00 08       	clrt
    4b66:	90 01       	mov.w	4b6c <_sddrv_129i+0x4b6c>,r0	! 9200
    4b68:	12 00       	mov.l	r0,@(0,r2)
    4b6a:	60 02       	mov.l	@r0,r0
    4b6c:	92 00       	mov.w	4b70 <_sddrv_129i+0x4b70>,r2	! 281
    4b6e:	e1 49       	mov	#73,r1
    4b70:	02 81       	.word 0x0281
    4b72:	00 00       	.word 0x0000
    4b74:	7f ff       	add	#-1,r15
    4b76:	02 42       	stc	spc,r2
    4b78:	00 ff       	mac.l	@r15+,@r0+
    4b7a:	82 c2       	.word 0x82c2
    4b7c:	34 01       	.word 0x3401
    4b7e:	4c df       	mac.w	@r13+,@r12+
    4b80:	00 03       	bsrf	r0
    4b82:	4e 75       	.word 0x4e75
    4b84:	eb 49       	mov	#73,r11
    4b86:	43 fb       	.word 0x43fb
    4b88:	10 5e       	mov.l	r5,@(56,r0)
    4b8a:	d0 40       	mov.l	4c8c <_sddrv_129i+0x4c8c>,r0	! 0 <_sddrv_129i>
    4b8c:	66 00       	mov.b	@r0,r6
    4b8e:	03 64       	mov.b	r6,@(r0,r3)
    4b90:	20 51       	mov.w	r5,@r0
    4b92:	70 00       	add	#0,r0
    4b94:	72 00       	add	#0,r2
    4b96:	74 00       	add	#0,r4
    4b98:	76 00       	add	#0,r6
    4b9a:	78 00       	add	#0,r8
    4b9c:	7a 00       	add	#0,r10
    4b9e:	7c 00       	add	#0,r12
    4ba0:	14 18       	mov.l	r1,@(32,r4)
    4ba2:	0c 02       	stc	sr,r12
    4ba4:	00 7f       	mac.l	@r7+,@r0+
    4ba6:	62 00       	mov.b	@r0,r2
    4ba8:	01 6a       	sts	fpscr,r1
    4baa:	18 18       	mov.l	r1,@(32,r8)
    4bac:	1a 18       	mov.l	r1,@(32,r10)
    4bae:	2e 02       	mov.l	r0,@r14
    4bb0:	de 47       	mov.l	4cd0 <_sddrv_129i+0


	line-height: 1.5 !important;
	}
}

@media (min-width: 1440px) {
	.custom-responsive-m-p-x {
		margin-right: 3rem !important;
		margin-left: 3rem !important;
		padding-right: 3rem !important;
		padding-left: 3rem !important;
	}
}

.custom-plus {
	position: relative;
}

.custom-plus:before {
	content: '+';
	position: absolute;
	top: 30px;
	right: -23px;
	font-size: 0.4em;
	font-weight: 400;
}

.custom-square-1 {
	position: absolute;
	top: -10px;
	left: -10px;
}

.custom-square-1 rect {
	fill-opacity: 0;
	stroke-dasharray: 1550;
	stroke-dashoffset: 1550;
	transition: ease all 2000ms;
}

.custom-square-1 rect.appear-animation-visible {
	stroke-dashoffset: 0;
}

.custom-square-1.custom-square-top-right {
	right: -10px;
	left: auto;
}

.custom-square-1.custom-square-1-no-pos {
	top: 0;
	left: 0;
}

.custom-square-1.custom-square-1-no-pos rect.appear-animation-visible {
	fill-opacity: 1;
}

@media (max-width: 575px) {
	.custom-mobile-square-thickness rect {
		stroke-width: 15px;
	}
}

.lineProgressFrom {
	stroke-dashoffset: 1550 !important;
	transition: ease stroke-dashoffset 8s !important;
}

.lineProgressTo {
	stroke-dashoffset: 0 !important;
}

.lineProgressAndFillFrom {
	stroke-dashoffset: 1550;
	fill-opacity: 0;
	transition: ease stroke-dashoffset 3s, ease fill-opacity 1s 2s !important;
}

.lineProgressAndFillTo {
	stroke-dashoffset: 300;
	fill-opacity: 1;
}

.custom-btn-color-1 {
	border-color: #43474A !important;
}

.custom-btn-color-1:hover {
	border-color: var(--dark) !important;
}

.custom-btn-style-1.btn-dark {
	background: #FFF !important;
}

.custom-btn-style-1.btn-dark:hover {
	background: var(--dark) !important;
}

.active-revslide .custom-square-1 rect {
	stroke-dashoffset: 0;
}

.custom-featured-boxes-style-1 .featured-box .box-content {
	padding: 3.8rem 1.8rem;
	border: 7px solid #43474A;
	transition: ease border-color 300ms;
}

.custom-featured-boxes-style-1 .featured-box .box-content svg {
	width: 88px;
	height: auto;
	fill: #FFF;
	transition: ease fill 300ms;
}

.custom-thumb-info-style-1.thumb-info-bottom-info-dark-linear .thumb-info-title {
	background: transparent;
}

.custom-thumb-info-style-1.thumb-info-bottom-info .thumb-info-title {
	padding: 2.3rem;
}

.owl-carousel.custom-nav-size-1 .owl-nav .owl-prev, .owl-carousel.custom-nav-size-1 .owl-nav .owl-next {
	font-size: 1.4rem;
}

.card:hover .custom-square-1 rect {
	stroke-dashoffset: 0;
}

.card.custom-card-style-1 {
	background: transparent;
	border: 7p


ndler(PC)
	cmpi	#0,ACC_vwk_f(A4)
	bne.s	.T_1992
	jsr	T_1C98(PC)
.T_1992:
	addq	#1,D5
.T_1994:
	move	D5,D0
	cmp	ACC_count(A4),D0
	blt	.T_1920
	bra	multi_task_loop
;----------------------------------------------------------------------------
;End of:	ETERNAL LOOP ROUTINE
;----------------------------------------------------------------------------
;Start of:	Subroutine 'redraw_scroll_stuff_tree'
;----------------------------------------------------------------------------
redraw_scroll_stuff_tree:
	link	A6,#-$4
	movem.l	D5-D7/A2-A3,-(SP)
	move.l	stuff_tree_p(a4),D6
	move.l	ACC_title_spt_p(A4),D0
	movea.l	D0,A3			;a3 -> ACC_title_spt
	lea	string_p_t(a4),A2
	move	#$14,D5
	move	#5,-$4(A6)
	move	ACC_offset(a4),D0
	add.w	#$12,D0
	move	D0,-$2(A6)
	move	#1,-(SP)
	clr	-(SP)
	move	box_1_h(A4),-(SP)
	move	box_1_w(A4),-(SP)
	move	box_1_y(A4),-(SP)
	move	box_1_x(A4),-(SP)
	clr	-(SP)
	move	#4,-(SP)
	move.l	D6,-(SP)
	jsr	objc_change_sub(PC)
	adda	#$14,SP
	move	#1,-(SP)
	clr	-(SP)
	move	box_1_h(A4),-(SP)
	move	box_1_w(A4),-(SP)
	move	box_1_y(A4),-(SP)
	move	box_1_x(A4),-(SP)
	clr	-(SP)
	move	#$17,-(SP)
	move.l	D6,-(SP)
	jsr	objc_change_sub(PC)
	adda	#$14,SP
	cmpi	#0,ACC_offset(a4)
	bne.s	.T_1A5A
	move	#1,-(SP)
	move	#8,-(SP)
	move	box_1_h(A4),-(SP)
	move	box_1_w(A4),-(SP)
	move	box_1_y(A4),-(SP)
	move	box_1_x(A4),-(SP)
	clr	-(SP)
	move	#4,-(SP)
	move.l	D6,-(SP)
	jsr	objc_change_sub(PC)
	adda	#$14,SP
.T_1A5A:
	move	-$2(A6),D0
	cmp	ACC_count(A4),D0
	bne.s	.T_1A8E
	move	#1,-(SP)
	move	#8,-(SP)
	move	box_1_h(A4),-(SP)
	move	box_1_w(A4),-(SP)
	move	box_1_y(A4),-(SP)
	move	box_1_x(A4),-(SP)
	clr	-(SP)
	move	#$17,-(SP)
	move.l	D6,-(SP)
	jsr	objc_change_sub(PC)
	adda	#$14,SP
.T_1A8E:
	move	ACC_offset(a4),D7
	bra.s	.T_1AD2
;
.T_1A96:
	move	D7,D0
	asl.l	#2,D0
	move


d) {
  SpanInfoT *li = spanInfo;
  short n = HEIGHT;
  register short z asm("d1") = 0x7fff;
  short *wp = (short *)li;
  int *lp;

  while (--n >= 0) {
    *wp++ = z; /* depth */
    lp = (int *)wp;
    *lp++ = 0; /* width & color */
    wp = (short *)lp;
  }
}

#define SAFECHECK 0

#if SAFECHECK == 1
#define ONSCREEN(y) (((y) & -256) == 0)
#else
#define ONSCREEN(y) (1)
#endif

static void DrawPrismFaces(PrismT *prism, SpanInfoT *spanInfo) {
  SpanT *span0 = &prism->spans[0];
  SpanT *span1 = &prism->spans[1];
  short ns = prism->nedges;

  while (--ns >= 0) {
    short y0 = span0->y;
    short y1 = span1->y;

    /* skip faces that are turned backwards to the eye */
    if (y0 < y1) {
      SpanInfoT *si = &spanInfo[y0];

      int x0 = span0->x << 16;
      int x1 = span1->x << 16;
      int z0 = span0->z << 16;
      int z1 = span1->z << 16;
      int dx = div16((x1 - x0) >> 8, y1 - y0) << 8;
      int dz = div16((z1 - z0) >> 8, y1 - y0) << 8;

      short color;
      short shade;

      shade = dz >> 12;

      if (shade < 0)
        shade = -shade;

      shade = 12 - shade;

      if (shade < -12)
        shade = -12;
      if (shade > 12)
        shade = 12;

      color = colorShades[prism->color][16 + shade];

      /* draw face */
      while (y0 < y1) {
        /* check if span Y is within [0, 255] */
        if (ONSCREEN(y0)) {
          x0 = swap16(x0);
          z0 = swap16(z0);
          if (si->depth <= (short)z0) {
            si++;
          } else {
            short *wp = (short *)si;
            *wp++ = z0;       /* depth */
            *wp++ = x0;       /* width */
            *wp++ = color;    /* color */
            si = (SpanInfoT *)wp;
          }
          x0 = swap16(x0);
          z0 = swap16(z0);
          // Log("%d: (%d, %d)\n", i, y0, x0 >> 16);
          x0 += dx;
          z0 += dz;
          y0++;
        }
      }
    }

    span0++, span1++;
  }
}

static void DrawVisibleSpans(SpanInfoT *si, CopLineT **lineTab) {
  short n = HEIGHT;

  while (--n >= 0) {
    short *wp = (short *)si;
    short depth = *wp++;
    short width = *wp++;
    short color = *wp++;
    short bplcon2 = (depth > centerZ)
      ? (BPLCON2_PF1P_BOTTOM | BPLCON2_PF2P_BOTTOM)
      : (BPLCON2_PF1P_SP07 | BPLCON2_PF2P_SP07);
    CopLineT *lineIns = *lineTab++;

    CopInsSet16(&lineIns->color, color);
    CopInsSet16(&lineIns->bplpri, bplcon2);
    CopInsSet32(&lineIns->bplptr, (void *)getlong(rowAddr, width));

    si = (SpanInfoT *)wp;
  }
}

static void RenderPrisms(short rotate) {
  PrismT *prism = prisms;
  short n = PRISMS;

  ClearSpanInfo();

  while (--n >= 0) {
    if (n & 1)
      prism->rotate = rotate * 2;
    else
      prism->rotate = -rotate * 2;
    RotatePrism(prism, rotate);
    DrawPrismFaces(prism, spanInfo);
    prism++;
  }

  DrawVisibleSpans(spanInfo, copLines[active]);
}

PROFILE(RenderPrisms);

static void Render(void) {
  ProfilerStop(RenderPrisms);
  {
    RenderPrisms(frameCount << 3);
  }
  ProfilerStop(RenderPrisms);

  CopListRun(cp[active]);
  TaskWaitVBlank();
  active ^= 1;
}

EFFECT(Prisms, NULL, NULL, Init, Kill, Render, NULL);


uint32_t surfaceFormatCount;
    VULKAN_HPP_NAMESPACE::Result result;
    do
    {
      result = static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkGetPhysicalDeviceSurfaceFormats2KHR( static_cast<VkPhysicalDevice>( m_physicalDevice ), reinterpret_cast<const VkPhysicalDeviceSurfaceInfo2KHR *>( &surfaceInfo ), &surfaceFormatCount, nullptr ) );
      if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && surfaceFormatCount )
      {
        structureChains.resize( surfaceFormatCount );
        surfaceFormats.resize( surfaceFormatCount );
        for ( uint32_t i = 0; i < surfaceFormatCount; i++ )
        {
          surfaceFormats[i].pNext = structureChains[i].template get<VULKAN_HPP_NAMESPACE::SurfaceFormat2KHR>().pNext;
        }
        result = static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkGetPhysicalDeviceSurfaceFormats2KHR( static_cast<VkPhysicalDevice>( m_physicalDevice ), reinterpret_cast<const VkPhysicalDeviceSurfaceInfo2KHR *>( &surfaceInfo ), &surfaceFormatCount, reinterpret_cast<VkSurfaceFormat2KHR *>( surfaceFormats.data() ) ) );
      }
    } while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
    VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceFormats2KHR" );
    VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() );
      if ( surfaceFormatCount < surfaceFormats.size() )
      {
        structureChains.resize( surfaceFormatCount );
      }
      for ( uint32_t i = 0; i < surfaceFormatCount; i++ )
      {
        structureChains[i].template get<VULKAN_HPP_NAMESPACE::SurfaceFormat2KHR>() = surfaceFormats[i];
      }
    return structureChains;
  }

  //=== VK_KHR_get_display_properties2 ===

  // wrapper function for command vkGetPhysicalDeviceDisplayProperties2KHR, see https://registry.khronos.org/vulkan/specs/latest/man/html/vkGetPhysicalDeviceDisplayProperties2KHR.html
   VULKAN_HPP_NODISCARD  VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::DisplayProperties2KHR> PhysicalDevice::getDisplayProperties2KHR(  ) const
  {
VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceDisplayProperties2KHR && "Function <vkGetPhysicalDeviceDisplayProperties2KHR> requires <VK_KHR_get_display_properties2>" );

    std::vector<VULKAN_HPP_NAMESPACE::DisplayProperties2KHR> properties;
    uint32_t propertyCount;
    VULKAN_HPP_NAMESPACE::Result result;
    do
    {
      result = static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkGetPhysicalDeviceDisplayProperties2KHR( static_cast<VkPhysicalDevice>( m_physicalDevice ), &propertyCount, nullptr ) );
      if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && propertyCount )
      {
        properties.resize( propertyCount );
        result = static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkGetPhysicalDeviceDisplayProperties2KHR( static_cast<VkPhysicalDevice>( m_physicalDevice ), &propertyCount, reinterpret_cast<VkDisplayProperties2KHR *>( properties.data() ) ) );
      }
    } while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
    VULKAN_HPP_NAMESPACE::detail::resultCheck( result, VULKAN_HPP_NAMESPACE_STRING "::


* the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *

 * This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package omega.ui.dialog;

import omega.Screen;
import omegaui.component.FlexPanel;
import omegaui.component.NoCaretField;
import omegaui.component.SwitchComp;
import omegaui.component.TextComp;

import javax.swing.*;
import java.awt.*;
import java.util.LinkedList;

import static omega.io.UIManager.*;

public class FontChooser extends JDialog {

    private TextComp titleComp;

    private FlexPanel fontFamilyPanel;

    private NoCaretField sampleField;

    private SwitchComp buildComp;

    private NoCaretField searchField;
    private NoCaretField sizeField;

    private TextComp closeComp;
    private TextComp applyComp;

    private FlexPanel fontPanel;
    private JScrollPane fontScrollPane;

    private LinkedList<TextComp> fontList = new LinkedList<>();

    private int block;
    private int fontSize = 16;

    private volatile boolean cancel;

    public FontChooser(Screen screen) {
        super(screen, true);
        setTitle("Omega IDE -- Font Chooser");
        setUndecorated(true);
        JPanel panel = new JPanel(null);
        panel.setBackground(c2);
        setContentPane(panel);
        setSize(560, 300);
        setLocationRelativeTo(null);
        setBackground(c2);
        init();
    }

    public void init() {
        titleComp = new TextComp("Font Chooser", c2, TOOLMENU_GRADIENT, glow, null);
        titleComp.setBounds(0, 0, getWidth(), 30);
        titleComp.setClickable(false);
        titleComp.setFont(PX14);
        titleComp.setArc(0, 0);
        titleComp.attachDragger(this);
        add(titleComp);

        fontFamilyPanel = new FlexPanel(null, TOOLMENU_COLOR6_SHADE, null);
        fontFamilyPanel.setBounds(10, 40, 300, 250);
        fontFamilyPanel.setArc(5, 5);
        add(fontFamilyPanel);

        fontScrollPane = new JScrollPane(fontPanel = new FlexPanel(null, c2, c2));
        fontPanel.setArc(0, 0);
        fontScrollPane.setBounds(10, 40, fontFamilyPanel.getWidth() - 20, fontFamilyPanel.getHeight() - 50);
        fontScrollPane.setBackground(c2);
        fontFamilyPanel.add(fontScrollPane);

        fontPanel.setPreferredSize(new Dimension(fontScrollPane.getWidth(), fontScrollPane.getHeight()));

        searchField = new NoCaretField("", "Search Font", TOOLMENU_COLOR6, c2, TOOLMENU_COLOR2);
        searchField.setOnAction(() -> search(searchField.getText()));
        searchField.setBounds(10, 10, fontFamilyPanel.getWidth() - 20, 25);
        searchField.setFont(PX14);
        fontFamilyPanel.add(searchField);

        sampleField = new NoCaretField("Hello World", "", TOOLMENU_COLOR3, c2, TOOLMENU_COLOR1);
        sampleField.setBounds(320, 40, getWidth() - 340, 40);
        sampleField.setFont(PX16);
        add(sampleField);

        TextComp label1 = new TextComp("Use Bold Style", back3, TOOLMENU_GRADIENT, glow, null);
        label1.setB


pSrcTmp, pSrcLeft, leftStep
        ADD     srcStep, leftStep, leftStep
        ;// Load Left Edge
        VLD1    {dLeftVal0[]},[pSrcLeft],srcStep           ;// pSrcLeft[0*leftStep]
        VLD1    {dLeftVal1[]},[pSrcTmp],srcStep            ;//    pSrcLeft[1*leftStep]
        VLD1    {dLeftVal2[]},[pSrcLeft]                   ;//    pSrcLeft[2*leftStep]
        VLD1    {dLeftVal3[]},[pSrcTmp]                    ;//    pSrcLeft[3*leftStep]

        ADD     pDstTmp, pDst, dstStep
        ADD     dstep, dstStep, dstStep

        VST1    dLeftVal0U32[0],[pDst],dstep                ;// pDst[0*dstStep+x] :0<= x <= 7
        VST1    dLeftVal1U32[0],[pDstTmp],dstep             ;// pDst[1*dstStep+x] :0<= x <= 7
        VST1    dLeftVal2U32[0],[pDst]                      ;// pDst[2*dstStep+x] :0<= x <= 7
        VST1    dLeftVal3U32[0],[pDstTmp]                   ;// pDst[3*dstStep+x] :0<= x <= 7

        B        ExitPredict4x4                             ;// Branch to exit code

OMX_VC_4x4_VERT

        ;// Load Upper Edge
        VLD1     dAboveU32[0],[pSrcAbove]
        ADD     pDstTmp, pDst, dstStep
        ADD     dstep, dstStep, dstStep

DCPredict4x4VertStore

        VST1     dAboveU32[0],[pDst],dstep
        VST1     dAboveU32[0],[pDstTmp],dstep
        VST1     dAboveU32[0],[pDst]
        VST1     dAboveU32[0],[pDstTmp]

        B        ExitPredict4x4                             ;// Branch to exit code

OMX_VC_4x4_DC

        TST     availability, #OMX_VC_LEFT
        BEQ     DCPredict4x4LeftNotAvailable

        ADD     pSrcTmp, pSrcLeft, leftStep
        ADD     srcStep, leftStep, leftStep
        ;// Load Left Edge
        VLD1    {dLeftVal[0]},[pSrcLeft],srcStep            ;// pSrcLeft[0*leftStep]
        VLD1    {dLeftVal[1]},[pSrcTmp],srcStep             ;//    pSrcLeft[1*leftStep]
        VLD1    {dLeftVal[2]},[pSrcLeft]                    ;//    pSrcLeft[2*leftStep]
        VLD1    {dLeftVal[3]},[pSrcTmp]                     ;//    pSrcLeft[3*leftStep]

        TST     availability, #OMX_VC_UPPER
        BEQ     DCPredict4x4LeftOnlyAvailable

        ;// Load Upper Edge also
        VLD1     dLeftValU32[1],[pSrcAbove]                 ;// pSrcAbove[0 to 3]
        MOV      return, #OMX_Sts_NoErr

        VPADDL   dSumAboveLeftU16, dLeftVal                 ;// [pSrcAbove[2+3 | 0+1] | pSrcLeft[2+3 | 0+1]]
        VPADDL   dSumAboveLeftU32, dSumAboveLeftU16         ;// [pSrcAbove[2+3+0+1] | pSrcLeft[2+3+0+1]]
        VPADDL   dSumAboveLeftU64, dSumAboveLeftU32         ;// [pSrcAbove[2+3+0+1] + pSrcLeft[2+3+0+1]]


voice_key_2 = -1,
		profile = "",
		mission_complete = "",
		headtouch = "",
		feeling2 = "",
		feeling4 = "",
		unlock = "孤單地航行、孤獨地戰鬥、孤寂地沉沒的少女，如今迎來了另一個結局……嗯？指揮官，您從剛剛開始就一直盯著我笑耶……是想吃這個了嗎？",
		battle = "不可以打擾學園裡的大家喔",
		login = "向歐根請教稍微化了下妝……有看出來嗎？",
		vote = "",
		detail = "我還在努力學習戰鬥以外的事情，生活並不比戰鬥更輕鬆呢……",
		couple_encourage = {}
	},
	[403053] = {
		touch = "指揮官，我跟上你的腳步了嗎？",
		feeling3 = "",
		upgrade = "",
		expedition = "",
		win_mvp = "",
		home = "皇家也不是每個人都像阿賈克斯那麼奇怪，能好好相處的人還是不少的……",
		mission = "",
		touch2 = "指揮官，大家都在看著你呢。",
		feeling1 = "",
		skill = "",
		drop_descrip = "如此華麗又正式……這就是晚會嗎？不知道能不能順利加入…但是，有指揮官一起的話…我會加油的！",
		mail = "雖然晚會還在進行，但是新的郵件還是不能忽略的。",
		lose = "",
		propose = "",
		hp_warning = "",
		id = 403053,
		voice_key = 0,
		feeling5 = "有了大家的陪伴，在這裡我已經不會再覺得孤獨了。或許，遇見指揮官你，就是我能想像出的最幸福的事情了吧…",
		main = "阿賈克斯她……她不會在晚會上做出什麼驚人的事情吧？ |晚會上的大家，臉上都帶著開心的笑容…如果以前的我，根本想像不了這樣美好的景象吧。 |指揮官，我的同伴們好像在找我，稍微失陪一下了。",
		voice_key_2 = -1,
		profile = "",
		mission_complete = "",
		headtouch = "",
		feeling2 = "",
		feeling4 = "",
		unlock = "如此華麗又正式……這就是晚會嗎？不知道能不能順利加入…但是，有指揮官一起的話…我會加油的！",
		battle = "不允許你們打


       d2-times
             x_d2,0 ... x_d2,d1-1 */

  int cdim, rdim, i;
  switch(get_mode(is)) {
    case CGAL::IO::BINARY :
      CGAL::read(is,rdim);
      CGAL::read(is,cdim);
      for (i=0; i<rdim*cdim; ++i)
        CGAL::read(is,M(i/rdim,i%cdim));
      break;
    case CGAL::IO::ASCII :
      is >> rdim >> cdim;
      M = Matrix_<NT_,AL_>(rdim,cdim);
      for (i=0; i<rdim*cdim; ++i)
        is >> M(i/rdim,i%cdim);
      break;
    default:
      std::cerr<<"\nStream must be in ascii or binary mode"<<std::endl;
      break;
  }
  return is;
}

/*{\Ximplementation
The data type |\Mname| is implemented by two-dimensional arrays of
variables of type |NT|. The memory layout is row oriented. Operation
|column| takes time $O(n)$, |row|, |dim1|, |dim2| take constant time,
and all other operations take time $O(nm)$.  The space requirement is
$O(nm)$.}*/

} // Linear_Algebra
} // CGAL

#endif // CGAL_MATRIX___H


/*
 * fsarchiver: Filesystem Archiver
 *
 * Copyright (C) 2008-2018 Francois Dupoux.  All rights reserved.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public
 * License v2 as published by the Free Software Foundation.
 *
 * This program 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.
 *
 * Homepage: http://www.fsarchiver.org
 */

#ifdef HAVE_CONFIG_H
#  include "config.h"
#endif

#include <string.h>

#include "fsarchiver.h"
#include "options.h"
#include "error.h"

coptions g_options;

int options_init()
{
    memset(&g_options, 0, sizeof(coptions));
    if (strlist_init(&g_options.exclude)!=0)
        return -1;
    return 0;
}

int options_destroy()
{
    if (strlist_destroy(&g_options.exclude)!=0)
        return -1;
    memset(&g_options, 0, sizeof(coptions));
    return 0;
}

int options_select_compress_level(int opt)
{
    switch (opt)
    {
#ifdef OPTION_LZ4_SUPPORT
        case 0: // lz4
            g_options.compressalgo=COMPRESS_LZ4;
            break;
#else
        case 0: // lz4
            errprintf("compression level %d is not available: lz4 has been disabled at compilation time\n", opt);
            return -1;
#endif // OPTION_LZ4_SUPPORT
#ifdef OPTION_LZO_SUPPORT
        case 1: // lzo
            g_options.compressalgo=COMPRESS_LZO;
            g_options.compresslevel=3;
            break;
#else
        case 1: // lzo
            errprintf("compression level %d is not available: lzo has been disabled at compilation time\n", opt);
            return -1;
#endif // OPTION_LZO_SUPPORT
        case 2: // gzip fast
            g_options.compressalgo=COMPRESS_GZIP;
            g_options.compresslevel=3;
            break;
        case 3: // gzip standard
            g_options.compressalgo=COMPRESS_GZIP;
            g_options.compresslevel=6;
            break;
        case 4: // gzip best
            g_options.compressalgo=COMPRESS_GZIP;
            g_options.compresslevel=9;
            break;
        case 5: // bzip2 fast
            g_options.compressalgo=COMPRESS_BZIP2;
            g_options.datablocksize=262144;
            g_options.compresslevel=2;
            break;
        case 6: // bzip2 good
            g_options.compressalgo=COMPRESS_BZIP2;
            g_options.datablocksize=524288;
            g_options.compresslevel=5;
            break;
#ifdef OPTION_LZMA_SUPPORT
        case 7: // lzma fast
            g_options.compressalgo=COMPRESS_LZMA;
            g_options.datablocksize=262144;
            g_options.compresslevel=1;
            break;
        case 8: // lzma medium
            g_options.compressalgo=COMPRESS_LZMA;
            g_options.datablocksize=524288;
            g_options.compresslevel=6;
            break;
        case 9: // lzma best
            g_options.compressalgo=COMPRESS_LZMA;
            g_options.datablocksize=FSA_MAX_BLKSIZE;
            g_options.compresslevel=9;
            break;
#else
        case 7: // lzma
        case 8: // lzma
        case 9: // lzma
            errprintf("compression level %d is not available: lzma has been disabled at compilation time\n", opt);
            return -1;
#endif
        default:
            errprintf("invalid compression level: %d\n", opt);
            return -1;
    }

    return 0;
}


/* SPDX-License-Identifier: GPL-2.0-only */

#include <arch/romstage.h>
#include <device/pci_ops.h>
#include <cbmem.h>
#include <commonlib/helpers.h>
#include <cpu/x86/mtrr.h>
#include <program_loading.h>
#include "i440bx.h"

uintptr_t cbmem_top_chipset(void)
{
	/* Base of TSEG is top of usable DRAM */
	/*
	 * SMRAM - System Management RAM Control Register
	 * 0x72
	 * [7:4] Not relevant to this function.
	 * [3:3] Global SMRAM Enable (G_SMRAME)
	 * [2:0] Hardwired to 010.
	 *
	 * ESMRAMC - Extended System Management RAM Control
	 * 0x73
	 * [7:7] H_SMRAM_EN
	 *       1 = When G_SMRAME=1, High SMRAM space is enabled at
	 *           0x100A0000-0x100FFFFF and forwarded to DRAM address
	 *           0x000A0000-0x000FFFFF.
	 *       0 = When G_SMRAME=1, Compatible SMRAM space is enabled at
	 *           0x000A0000-0x000BFFFF.
	 * [6:3] Not relevant to this function.
	 * [2:1] TSEG Size (T_SZ)
	 *       Selects the size of the TSEG memory block, if enabled.
	 *       00 = 128KiB
	 *       01 = 256KiB
	 *       10 = 512KiB
	 *       11 = 1MiB
	 * [0:0] TSEG_EN
	 *       When SMRAM[G_SMRAME] and this bit are 1, TSEG is enabled to
	 *       appear between DRAM address (TOM-<TSEG Size>) to TOM.
	 *
	 * Source: 440BX datasheet, pages 3-28 thru 3-29.
	 */
	uintptr_t tom = pci_read_config8(NB, DRB7) * 8 * MiB;

	int gsmrame = pci_read_config8(NB, SMRAM) & 0x8;
	/* T_SZ and TSEG_EN */
	int tseg = pci_read_config8(NB, ESMRAMC) & 0x7;
	if ((tseg & 0x1) && gsmrame) {
		int tseg_size = 128 * KiB * (1 << (tseg >> 1));
		tom -= tseg_size;
	}
	return tom;
}

void fill_postcar_frame(struct postcar_frame *pcf)
{
	/* Cache CBMEM region as WB. */
	const uintptr_t top_of_ram = cbmem_top();
	postcar_frame_add_mtrr(pcf, top_of_ram - 8*MiB, 8*MiB,
		MTRR_TYPE_WRBACK);
}


与流程管理相关的几个重要元素。

# 流程属性-关键元素

流程属性定义流程的所有关键和基本特征。 这些元素包含流程的状态和标识以及其他重要的关键值。

# 状态 / 国家 / 政府 / 领土

进程从产生到退出可能存在各种状态，称为*进程状态*--它们定义了进程的当前状态：

*   **TASK_RUNNING**(0)：任务正在执行或争用调度程序运行队列中的 CPU。
*   **TASK_INTERRUPTABLE**(1)：任务处于可中断等待状态；它一直处于等待状态，直到等待的条件变为真，例如互斥锁可用、设备准备好 I/O、睡眠时间已过或独占唤醒。 在此等待状态下，为该进程生成的任何信号都会被传送，导致它在满足等待条件之前被唤醒。
*   **TASK_KILLABLE**：这类似于**TASK_INTERRUPTABLE**，不同之处在于中断只能在致命信号上发生，这使得它成为**TASK_INTERRUPTABLE**更好的替代方案。
*   **TASK_UNINTERRUTPIBLE**(2)：任务处于类似于**TASK_INTERRUPTABLE**的不可中断等待状态，不同之处在于向休眠进程生成的信号不会导致唤醒。 当它正在等待的事件发生时，流程转换到**TASK_RUNNING**。 此进程状态很少使用。
*   **TASK_STOPPED**(4)：任务已收到停止信号。 收到 CONTINUE 信号(SIGCONT)后，它将恢复运行。
*   **TASK_TRACED**(8)：进程在被梳理时被称为跟踪状态，可能是由调试器进行的。
*   **exit_zombie**(32)：进程终止，但其资源尚未回收。
*   **EXIT_DEADE**(16)：在父进程使用*WAIT*收集子进程的退出状态后，子进程被终止并释放其持有的所有资源。

下图描述了流程状态：

![](img/00009.jpeg)

# 管路及仪表布置图 / 比例-积分-微分 / 新闻处

此字段包含称为**PID**的唯一进程标识符。 Linux 中的 PID 类型为`pid_t`(整数)。 虽然 PID 是一个整数，但默认的最大 PID 数是通过`/proc/sys/kernel/pid_max`接口指定的 32,768 个。 此文件中的值可以设置为任何值，最大值为 222(`PID_MAX_LIMIT`，大约 400 万)。

为了管理 PID，内核使用位图。 该位图允许内核跟踪正在使用的 PID，并为新进程分配唯一的 PID。 每个 PID 由 PID 位图中的一个位标识；PID 的值由其相应位的位置确定。 位图中值为 1 的位表示对应的 PID 在*中使用*，值为 0 的位表示空闲 PID。 每当内核需要分配唯一的 PID 时，它都会查找第一个未设置的位并将其设置为 1，反之，为了释放 PID，它会将相应的位从 1 切换到 0。

# 非常感谢。

此字段包含线程组 ID。 为便于理解，假设在创建新进程时，其 PID 和 TGID 相同，因为该进程恰好是唯一的线程。 当进程产生新线程时，新子进程将获得唯一的 PID，但会继承父进程的 TGID，因为它属于相同的线程组。 TGID 主要用于支持多线程进程。 我们将在本章的线程部分深入研究更多细节。

# 线程信息

此字段保存处理器特定的状态信息，是任务结构的关键元素。 本章后面几节详细介绍了`thread_info`的重要性。

# 标出 / 悬旗于 / 标记

标志字段记录与进程相对应的各种属性。 该字段中的每个位对应于进程生命周期中的各个阶段。 每进程标志在`<linux/sched.h>`中定义：

```sh
#define PF_EXITING           /* getting shut dow


t;

  _AllMatchesIterable(this._re, this._string, this._start);

  Iterator<RegExpMatch> get iterator =>
      _AllMatchesIterator(_re, _string, _start);
}

class _AllMatchesIterator implements Iterator<RegExpMatch> {
  final JSSyntaxRegExp _regExp;
  String? _string;
  JSString? _jsString;
  int _nextIndex;
  RegExpMatch? _current;

  _AllMatchesIterator(this._regExp, this._string, this._nextIndex);

  RegExpMatch get current => _current as RegExpMatch;

  static bool _isLeadSurrogate(int c) {
    return c >= 0xd800 && c <= 0xdbff;
  }

  static bool _isTrailSurrogate(int c) {
    return c >= 0xdc00 && c <= 0xdfff;
  }

  bool moveNext() {
    var string = _string;
    if (string == null) return false;

    JSString? jsString = _jsString;
    if (jsString == null) {
      jsString = _jsString = _string!.toJS;
    }
    if (_nextIndex <= string.length) {
      RegExpMatch? match = _regExp._execGlobal(jsString, _nextIndex);
      if (match != null) {
        _current = match;
        int nextIndex = match.end;
        if (match.start == nextIndex) {
          // Zero-width match. Advance by one more, unless the regexp
          // is in unicode mode and it would put us within a surrogate
          // pair. In that case, advance past the code point as a whole.
          if (_regExp.isUnicode &&
              _nextIndex + 1 < string.length &&
              _isLeadSurrogate(string.codeUnitAt(_nextIndex)) &&
              _isTrailSurrogate(string.codeUnitAt(_nextIndex + 1))) {
            nextIndex++;
          }
          nextIndex++;
        }
        _nextIndex = nextIndex;
        return true;
      }
    }
    _current = null;
    _string = null; // Marks iteration as ended.
    return false;
  }
}

/// Returns a native version of the RegExp with the global flag set.
///
/// The RegExp's `lastIndex` property is zero when it is returned.
///
/// The returned regexp is shared, and its `lastIndex` property may be
/// modified by other uses, so the returned regexp must be used immediately
/// when it's returned, with no user-provided code run in between.
JSNativeRegExp regExpGetGlobalNative(JSSyntaxRegExp regexp) {
  final nativeRegexp = regexp._nativeGlobalVersion;
  nativeRegexp.lastIndex = 0.toJS;
  return nativeRegexp;
}

RegExpMatch? regExpExecGlobal(
  JSSyntaxRegExp regexp,
  JSString str,
  int startIndex,
) => regexp._execGlobal(str, startIndex);

JSNativeRegExp regExpGetNative(JSSyntaxRegExp regexp) => regexp._nativeRegExp;

/// Computes the number of captures in a regexp.
///
/// This currently involves creating a new RegExp object with a different
/// source and running it against the empty string (the last part is usually
/// fast).
///
/// The JSSyntaxRegExp could cache the result, and set the cache any time
/// it finds a match.
int regExpCaptureCount(JSSyntaxRegExp regexp) {
  final nativeAnchoredRegExp = regexp._nativeAnchoredVersion;
  nativeAnchoredRegExp.lastIndex = 0.toJS;
  final match = nativeAnchoredRegExp.exec(''.toJS)!;
  // The native-anchored regexp always have one capture more than the original,
  // and always matches the empty string.
  return match.length - 2;
}

/// Find the first match of [regExp] in [string] at or after [start].
RegExpMatch? firstMatchAfter(
  JSSyntaxRegExp regExp,
  JSString string,


moji(
      '😐',
      '冷漠 | 无感 | 脸 | 表情空洞 | 面无表情',
    ),
    Emoji(
      '🫤',
      '不相信 | 不确定 | 困惑 | 失望 | 怀疑 | 无所谓 | 无聊 | 沮丧 | 疑惑 | 迷惘 | 郁闷',
    ),
    Emoji(
      '😑',
      '无语 | 没有反应 | 绷着脸 | 脸 | 茫然 | 面无表情',
    ),
    Emoji(
      '😶',
      '嘴 | 安静 | 沉默 | 没嘴 | 秘密 | 脸',
    ),
    Emoji(
      '🫥',
      '内向 | 无所谓 | 沮丧 | 消失 | 虚线脸 | 隐形 | 隐藏',
    ),
    Emoji(
      '😏',
      '假笑 | 冷笑 | 得意 | 得意的笑 | 脸 | 诡异地笑',
    ),
    Emoji(
      '😒',
      '不屑 | 不服 | 不爽的脸 | 不高兴 | 脸 | 郁闷 | 鄙视 | 随便啦',
    ),
    Emoji(
      '🙄',
      '不敢苟同 | 无语 | 白眼 | 翻白眼 | 脸 | 随便啦',
    ),
    Emoji(
      '😬',
      '咬牙切齿 | 尴尬 | 牙医 | 脸 | 露齿 | 露齿而笑 | 鬼脸 | 龇牙咧嘴',
    ),
    Emoji(
      '🤥',
      '匹诺曹 | 脸 | 说谎 | 长鼻子 | 长鼻子脸',
    ),
    Emoji(
      '😌',
      '如释重负 | 松了口气 | 松口气 | 脸 | 蝉',
    ),
    Emoji(
      '😔',
      '失落 | 心事重重 | 忧虑 | 沉思 | 脸',
    ),
    Emoji(
      '🥹',
      '哭泣 | 喜极而泣 | 尴尬 | 忍住泪水 | 悲伤 | 情绪 | 感激 | 感谢 | 抗拒 | 拜托 | 生气 | 自豪',
    ),
    Emoji(
      '😪',
      '哭 | 困 | 想睡 | 满脸睡容 | 疲惫 | 睡觉 | 瞌睡 | 脸',
    ),
    Emoji(
      '🤤',
      '口水 | 垂涎 | 垂涎三尺 | 流口水 | 流口水的脸 | 脸',
    ),
    Emoji(
      '😴',
      '呼噜 | 小睡 | 想睡 | 打呼 | 晚安 | 睡容 | 睡着了 | 睡觉 | 累 | 累了 | 脸',
    ),
    Emoji(
      '😷',


          }
                        }

                        Text {
                            attr {
                                text("这是一个文本")
                                fontSize(20f)
                                color(Color.GREEN)
                            }
                        }
                    }
                }
            }
        }
    }

    override fun debugUIInspector(): Boolean {
        return true
    }
}

/**
 * Created by kam on 2022/7/28.
 */

@Page("6", supportInLocal = true)
internal class AbsLayoutWithFlexBugFixPager : BasePager() {

    companion object {
        val TAG = "DaShiDouPopDialog"
    }

    override fun body(): ViewBuilder {
        val ctx = this
        // LogModuleAPI.logI(TAG, "ViewBuilder called")
        return {
            attr {
                flexDirectionRow()
                backgroundColor(Color.RED)
//                allCenter()
            }

            //bg
            View {
                attr {
                    positionRelative()
                    backgroundColor(Color.GREEN)
                    //由于是相对布局，主轴撑满了父容器，纵轴flex(1.0f) 设置也撑满，就做到撑满背景了
                    flex(1.0f)
                    //孩子项目居中
                    allCenter()
                }

                //相对位置，并且由父容器的allCenter决定在中央
                View {
                    attr{

                    }

                    Image {
                        attr {
                            size(pagerData.pageViewWidth * 0.8f, pagerData.pageViewHeight * 0.8f)
                            //  src(ctx.bgUrl)
                            backgroundColor(Color.YELLOW)
                        }
                    }
                    View {
                        attr {
                            flexDirectionColumn()
//                            absolutePositionAllZero()
                            absolutePosition(left = 0f, right = 0f, bottom = 30f)
                            backgroundColor(Color.RED)
//                            allCenter()
//                            justifyContentCenter()

                        }

                        Image {
                            attr {
                                alignSelfCenter()
                                size(100f, 30f)
                                backgroundColor(Color.BLUE)
                            }

                        }

                    }

                }
            }

        }

    }

    override fun debugUIInspector(): Boolean {
//        return super.debugUIInspector()
        return true
    }

}/*
 * Tencent is pleased to support the open source community by making KuiklyUI
 * available.
 * Copyright (C) 2025 Tencent. All rights reserved.
 * Licensed under the License of KuiklyUI;
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * https://github.com/Tencent-TDS/KuiklyUI/blob/main/LICENSE
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.tencent.kuikly.demo.pages.app

import com.tencent.kuikly.core.annotations.Page
import com.tencent.kuikly.core.base.ViewBuilder
import com.tencent.kuikly.core.base.ViewRef
import com.tencent.kuikly.core.module.CallbackRef
import com.tencent.kuikly.core.module.NotifyModule
import com.tencent.kuikly.core.module.SharedPreferencesModule
import com.tencent.kuikly.core.reactive.handler.observable
import com.tencent.kuikly.core.reactive.handler.observableList
import com.tencent.kuikly.core.utils.PlatformUtils
import com.tencent.kuikly.core.views.Image
import com.tencent.kuikly.core.views.PageList
import com.tencent.ku


, U+51ca-51cb, U+51cd-51ce, U+51d4, U+51d6, U+51db-51dc, U+51e6, U+51e8-51eb, U+51f1, U+51f5, U+51fc, U+51ff, U+5202, U+5205, U+5208, U+520b, U+520d-520e, U+5215-5216, U+5228, U+522a, U+522c-522d, U+5233, U+523c-523d, U+523f-5240, U+5245, U+5247, U+5249, U+524b-524c, U+524e, U+5250, U+525b-525f, U+5261, U+5263-5264, U+5270, U+5273, U+5275, U+5277, U+527d, U+527f, U+5281-5285, U+5287, U+5289, U+528b, U+528d, U+528f, U+5291-5293, U+529a;
}

@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 400;
  src: local('Noto Serif SC'), local('NotoSerifSC-Regular'), url("") format('woff2');
  unicode-range: U+4fe3-4fe4, U+4fe6, U+4fe8, U+4feb-4fed, U+4ff3, U+4ff5-4ff6, U+4ff8, U+4ffe, U+5001, U+5005-5006, U+5009, U+500c, U+500f, U+5013-5018, U+501b-501e, U+5022-5025, U+5027-5028, U+502b-502e, U+5030, U+5033-5034, U+5036-5039, U+503b, U+5041-5043, U+5045-5046, U+5048-504a, U+504c-504e, U+5051, U+5053, U+5055-5057, U+505b, U+505e, U+5060, U+5062-5063, U+5067, U+506a, U+506c, U+5070-5072, U+5074-5075, U+5078, U+507b, U+507d-507e, U+5080, U+5088-5089, U+5091-5092, U+5095, U+5097-509e, U+50a2-50a3, U+50a5-50a7, U+50a9, U+50ad, U+50b3, U+50b5, U+50b7, U+50ba, U+50be, U+50c4-50c5, U+50c7, U+50ca, U+50cd, U+50d1, U+50d5-50d6, U+50da, U+50de, U+50e5-50e6, U+50ec-50ee, U+50f0-50f1, U+50f3, U+50f9-50fb, U+50fe-5102, U+5104, U+5106-5107, U+5109-510b, U+510d, U+510f;
}

@font-face {
  font-family: 'Noto Serif SC';
  font-style: normal;
  font-weight: 400;
  src: local('Noto Serif SC'), local('NotoSerifSC-Regular'), url("") format('woff2');
  unicode-range: U+4eb8-4eb9, U+4ebb-4ebe, U+4ec2-4ec4, U+4ec8-4ec9, U+4ecc, U+4ecf-4ed0, U+4ed2, U+4


gPath;
        this.ingredients = ingredients;
    }

}import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import { ErrorObservable } from 'rxjs/observable/ErrorObservable';

/* Function imports */
import { clone } from './clone';
import { getId, getIndexById, hasDefaultIdType, hasId, isMissingServerId } from './id-helpers';
import { getArrayFromObservables, normalizeErrorObservableMessage, toSubjectArray } from './observable-helpers';
import { stripSharedProperties } from './strip-shared-properties';
import { roundToDecimalPlace, toTitleCase } from './utilities';

/* Mock imports */
import { mockNestedObject } from '../../../test-config/mockmodels/mockNestedObject';
import { mockObjectArray } from '../../../test-config/mockmodels/mockObjectArray';
import { mockObservablesArray } from '../../../test-config/mockmodels/mockObservablesArray';

describe('Shared: utility functions', () => {

  describe('Clone', () => {

    test('should deep copy an object', () => {
      const _mockNestedObject: object = mockNestedObject();
      const cloned: object = clone(_mockNestedObject);
      expect(cloned).not.toBe(_mockNestedObject);
      expect(cloned['a']).toBe(_mockNestedObject['a']);
      expect(cloned['b']['e']['f']).toBe(_mockNestedObject['b']['e']['f']);
      expect(cloned['g'][0]['h']).toBe(_mockNestedObject['g'][0]['h']);
      expect(cloned['j'].length).toBe(3);
    }); // end 'should deep copy an object' test

  }); // end 'Clone' section

  describe('Id Helpers', () => {

    test('should get id', () => {
      const obj1: object = { _id: 'id' };
      const obj2: object = { cid: 'id' };
      const obj3: object = {};

      expect(getId(obj1)).toMatch('id');
      expect(getId(obj2)).toMatch('id');
      expect(getId(obj3)).toBeUndefined();
    }); // end 'should get id' test

    test('should get index of object by id', () => {
      const _mockObjectArray: object[] = mockObjectArray();
      const foundIndex: number = getIndexById('c', _mockObjectArray);
      expect(foundIndex).toBe(2);
      const notFound: number = getIndexById('e', _mockObjectArray);
      expect(notFound).toBe(-1);
    }); // end 'should get index of object by id' test

    test('should check if id is a client or server id', () => {
      expect(hasDefaultIdType('0123456789012')).toBe(true);
      expect(hasDefaultIdType('0a1b2c3d4e5f6g7h8i9j0kl1')).toBe(false);
      expect(hasDefaultIdType(undefined)).toBe(true);
    }); // end 'should check if id is a client or server id' test

    test('should check if server id is missing', () => {
      expect(isMissingServerId('0a1b2c3d4e5f6g7h8i9j0kl1')).toBe(false);
      expect(isMissingServerId(undefined)).toBe(true);
    }); // end 'should check if server id is missing' test

    test('should check if object contains search id', () => {
      const obj1: object = { _id: 'id' };
      const obj2: object = { cid: 'id' };
      const obj3: object = {};

      expect(hasId(obj1, 'id')).toBe(true);
      expect(hasId(obj2, 'id')).toBe(true);
      expect(hasId(obj1, 'other')).toBe(false);
      expect(hasId(obj3, 'id')).toBe(false);
      expect(hasId(obj1, null)).toBe(false);
      expect(hasId(obj


rar ou ocultar o botão de bolsa padrão da Blizzard.",
  ["ruRU"] = "Показать или скрыть стандартную кнопку сумки Blizzard.",
  ["zhCN"] = "显示或隐藏默认的暴雪背包按钮。",
  ["zhTW"] = "顯示或隱藏預設的暴雪背包按鈕。",
}
L.data["Show the full section in the bag window without truncating it with '...'"] = {
  ["deDE"] = "Zeigen Sie den gesamten Abschnitt im Taschenfenster an, ohne ihn mit '...' abzuschneiden",
  ["esES"] = "Mostrar la sección completa en la ventana de la bolsa sin truncarla con '...'",
  ["esMX"] = "Mostrar la sección completa en la ventana de la bolsa sin truncarla con '...'",
  ["frFR"] = "Afficher la section complète dans la fenêtre du sac sans la tronquer avec '...'",
  ["itIT"] = "Mostra l'intera sezione nella finestra della borsa senza tagliarla con '...'",
  ["koKR"] = "가방 창에 섹션을 '...'으로 잘라내지 않고 전체를 표시합니다.",
  ["ptBR"] = "Mostrar a seção inteira na janela da bolsa sem truncá-la com '...'",
  ["ruRU"] = "Показать весь раздел в окне сумки без обрезки его с помощью '...'",
  ["zhCN"] = "在背包窗口中显示完整部分，不要用“...”截断",
  ["zhTW"] = "在背包窗口中顯示完整部分，不要用“...”截斷",
}
L.data["Show the item level of items in this bag."] = {
  ["deDE"] = "Zeige das Gegenstandsstufe der Gegenstände in dieser Tasche.",
  ["esES"] = "Mostrar el nivel de objeto de los objetos en esta bolsa.",
  ["esMX"] = "Mostrar el nivel del objeto de los objetos en esta bolsa.",
  ["frFR"] = "Afficher le niveau des objets dans ce sac.",
  ["itIT"] = "Mostra il livello degli oggetti in questa borsa.",
  ["koKR"] = "이 가방의 아이템 레벨 표시.",
  ["ptBR"] = "Mostrar o nível dos itens nesta bolsa.",
  ["ruRU"] = "Показывать уровень предмета для предметов в этой сумке.",
  ["zhCN"] = "显示此包中新项目的项目等级。",
  ["zhTW"] = "顯示此包中新項目的項目等級。",
}
L.data["Size Ascending"] = {
  ["deDE"] = "Größe aufsteigend",
  ["esES"] = "Tamaño ascendente",
  ["esMX"] = "Tamaño ascendente",
  ["frFR"] = "Taille croissante",
  ["itIT"] = "Dimensione crescente",
  ["koKR"] = "크기 오름차순",
  ["ptBR"] = "Tamanho ascendente",
  ["ruRU"] = "Размер по возрастанию",
  ["zhCN"] = "大小升序",
  ["zhTW"] = "大小升序",
}
L.data["Size Descending"] = {
  ["deDE"] = "Größe ab


lda   #IDFlower
         sta   SprI,x     ; Sets ID and anim. stage
         lda   #$0000     ; Type to L
         bra   FlFinish   ; Code is identical from here on

         MX    %10
Flowr11c lda   #BlkId_Sprt1
         ldx   ItemCheckerTmp
         sta   MapBl,x    ; Different code now
         lda   #$3A       ; R-flower block
         sta   MapVl,x    ; Blank now
         sta   Tmp3       ; Erase block
         stz   Tmp3+1
         rep   #$30
         jsr   BlokZap
         rep   #$30
         lda   SpritesActiveCnt
         ASLS  3          ; x8
         adc   SpritesActiveCnt ; x9
         tax              ; in X
         lda   #IDFlower
         sta   SprI,x     ; Sets ID and anim. stage
         lda   #$0003     ; Set type to R

FlFinish sta   SprI+2,x
         lda   WinXEdgeBlk
         sec
         sbc   #$0010
         clc
         adc   OVRt
         sta   Tmp
         ASLS  2
         clc
         adc   Tmp        ; Current map block x5
         dec
         sta   SprI+4,x   ; Sets horizontal strip location
         lda   #$000b
         sec
         sbc   DWNt
         ASLS  4          ; x16
         dec
         sta   SprI+6,x   ; Sets vertical strip location
         inc   SpritesActiveCnt
         sep   #$20
         lda   #$FF
         sta   SprI+8,x   ; Sets non-level I.D.
         lda   #$05
         sta   Score2
         jmp   ScoreAdd

         lst   on
* Sprite: Flower v0.02
         lst   off

SH_Flower rep   #$20       ; actual entry point
         ldx   Tmp
         lda   SprI+4,x
         cmp   WinXEdgeTotalFifths
         bcs   Flower1    ; Not on screen
         lda   WinXEdgeTotalFifths
         sec
         sbc   SprI+4,x
         cmp   #$004E
         bcs   Flower1    ; Not on screen
         sta   Tmp2
         lda   SprI+6,x   ; 1- animation stage (0-6,odd)
         and   #$00ff     ; 2- flower type x3 (L or R)
         sta   Tmp        ; 4,5- H strip
         ASLS  2          ; 6- V strip (bottom=1)
         adc   Tmp        ; Vert.strip x 5
         ASLS  4          ; x 80
         adc   Tmp2       ; plus horizontal offset
         sta   DraW+1,y
         sep   #$20
         lda   SprI+1,x   ; Current animation stage
         lsr              ; divided by 2
         clc              ; +
         adc   #$60       ; offset into sprite data
         clc              ; +
         adc   SprI+2,x   ; type of flower
         sta   DraW,y     ; = current sprite
         inc   SprI+1,x
         lda   SprI+1,x
         cmp   #$06
         beq   Flower1
         inc   SpritesOnScreenCnt       ; Update the animation frame
         rts
Flower1  jmp   KillDis


lc(0.5 * var(--tile-size)));
}
div.saki-card.disabled, div.saki-card.disabled::before { filter: saturate(0%); }
/* double card view for mairu/himeko */
div.saki-card.shirouzu-mairu::after,
div.saki-card.tsuruta-himeko::after {
  left: calc(-350% + 0.5 * var(--card-width));
  z-index: 10;
}
div.saki-card.v12.shirouzu-mairu:hover::after, label.mod.v12.shirouzu-mairu::after { content: ""; background-position-x: calc(-5 * var(--card-width)); background-position-y: calc(-5 * var(--card-height)); }
div.saki-card.v12.tsuruta-himeko:hover::after { content: ""; background-position-x: calc(-7 * var(--card-width)); background-position-y: calc(-4 * var(--card-height)); }
div.saki-card.v13.shirouzu-mairu:hover::after, label.mod.v13.shirouzu-mairu::after { content: ""; background-position-x: calc(-2 * var(--card-width)); background-position-y: calc(-6 * var(--card-height)); }
div.saki-card.v13.tsuruta-himeko:hover::after { content: ""; background-position-x: calc(-2 * var(--card-width)); background-position-y: calc(-5 * var(--card-height)); }
div.saki-card.shirouzu-mairu::before,
div.saki-card.tsuruta-himeko::before {
  transform: translateX(calc(-0.5 * var(--card-width)));
}
div.shimocha div.saki-card.shirouzu-mairu::before,
div.shimocha div.saki-card.tsuruta-himeko::before {
  transform: rotate(90deg)
             translateX(calc(-0.5 * var(--card-width)))
             translateY(calc(3 * var(--tile-size)));
}
div.toimen div.saki-card.shirouzu-mairu::before,
div.toimen div.saki-card.tsuruta-himeko::before {
  transform: rotate(180deg)
             translateX(calc(-0.5 * var(--card-width)))
             translateY(calc(5 * var(--tile-size)));
}
div.kamicha div.saki-card.shirouzu-mairu::before,
div.kamicha div.saki-card.tsuruta-himeko::before {
  transform: rotate(270deg)
             translateX(calc(-0.5 * var(--card-width)));
}
div.shimocha div.saki-card.shirouzu-mairu::after,
div.shimocha div.saki-card.tsuruta-himeko::after {
  transform: rotate(90deg)
             translateX(calc(0.5 * var(--card-width)))
             translateY(calc(0.5 * var(--card-height)))
             translateY(calc(1.5 * var(--tile-size)));
}
div.toimen div.saki-card.shirouzu-mairu::after,
div.toimen div.saki-card.tsuruta-himeko::after {
  transform: rotate(180deg)
             translateX(calc(1 * var(--card-width)))
             translateY(calc(0.5 * var(--card-height)));
}
div.kamicha div.saki-card.shirouzu-mairu::after,
div.kamicha div.saki-card.tsuruta-himeko::after {
  transform: rotate(270deg)
             translateX(calc(0.5 * var


Name = "GarrLanding-ShipMission-";
			else
				bgName = "GarrLanding-Mission-";
			end
			button.Title:SetText(item.name);
			if (item.isComplete) then
				bgName = bgName.."Complete";
				if (item.isBuilding) then
					button.MissionType:SetText(GARRISON_LANDING_BUILDING_COMPLEATE);
				else
					button.MissionType:SetText(GarrisonFollowerOptions[item.followerTypeID].strings.LANDING_COMPLETE);
				end
				button.MissionType:SetTextColor(YELLOW_FONT_COLOR.r, YELLOW_FONT_COLOR.g, YELLOW_FONT_COLOR.b);
				button.Title:SetWidth(290);
			else
				bgName = bgName.."InProgress";
				button.MissionType:SetTextColor(GARRISON_MISSION_TYPE_FONT_COLOR.r, GARRISON_MISSION_TYPE_FONT_COLOR.g, GARRISON_MISSION_TYPE_FONT_COLOR.b);
				if (item.isBuilding) then
					button.MissionType:SetText(GARRISON_BUILDING_IN_PROGRESS);
				elseif ( GarrisonFollowerOptions[item.followerTypeID].hideMissionTypeInLandingPage ) then
					button.MissionType:SetText("");
				else
					button.MissionType:SetText(item.type);
				end
				button.TimeLeft:SetText(item.timeLeft);
				stopUpdate = false;
				button.Title:SetWidth(322 - button.TimeLeft:GetWidth());
			end
			button.MissionTypeIcon:SetAtlas(item.typeAtlas);
			if (item.followerTypeID == LE_FOLLOWER_TYPE_GARRISON_7_0) then
				button.MissionTypeIcon:SetSize(40, 40);
				button.MissionTypeIcon:SetPoint("TOPLEFT", 5, -3);
			else
				button.MissionTypeIcon:SetSize(50, 50);
				button.MissionTypeIcon:SetPoint("TOPLEFT", 0, 2);
			end
			button.MissionTypeIcon:SetShown(not item.isBuilding);
			button.Status:SetShown(not item.isComplete);
			button.TimeLeft:SetShown(not item.isComplete);

			button.BG:SetAtlas(bgName, true);
			for i = 1, #button.Rewards do
				button.Rewards[i]:Hide();
			end
			button:Show();
		else
			button:Hide();
		end
	end

	local totalHeight = numItems * scrollFrame.buttonHeight;
	local displayedHeight = numButtons * scrollFrame.buttonHeight;
	HybridScrollFrame_Update(scrollFrame, totalHeight, displayedHeight);

	return stopUpdate;
end

function GarrisonLandingPageReportList_UpdateMouseOverTooltip(self)
	local buttons = self.buttons;
	for i = 1, #buttons do
		if ( buttons[i]:IsMouseOver() ) then
			GarrisonLandingPageReportMission_OnEnter(buttons[i]);
			break;
		end
	end
end

function GarrisonLandingPageReportMission_FilterOutCombatAllyMissions(items)
	for i = #items, 1, -1 do
		if (not items[i].isBuilding and items[i].isZoneSupport) then
			table.remove(items, i);
		end
	end
	return items;
end

function GarrisonLandingPageReportMission_OnClick(self, button)

	local items = GarrisonLandingPageReport.List.items or {};
	if GarrisonLandingPageReport.selectedTab == GarrisonLandingPageReport.Available then
		items = GarrisonLandingPageReport.List.AvailableItems;
	end

	local item = items[self.id];

	-- non mission entries have no click capability
	if not item.missionID the


import enum
from abc import ABC
from dataclasses import dataclass, field
from types import MappingProxyType
from typing import List, Iterable, Set, ClassVar, Tuple, Mapping, Callable, Any

from ..stardew_rule.protocol import StardewRule

DEFAULT_REQUIREMENT_TAGS = MappingProxyType({})

@dataclass(frozen=True)
class Requirement(ABC):
    ...

class ItemTag(enum.Enum):
    CROPSANITY_SEED = enum.auto()
    CROPSANITY = enum.auto()
    FISH = enum.auto()
    FRUIT = enum.auto()
    VEGETABLE = enum.auto()
    EDIBLE_MUSHROOM = enum.auto()
    BOOK = enum.auto()
    BOOK_POWER = enum.auto()
    BOOK_SKILL = enum.auto()

@dataclass(frozen=True)
class ItemSource(ABC):
    add_tags: ClassVar[Tuple[ItemTag]] = ()

    other_requirements: Tuple[Requirement, ...] = field(kw_only=True, default_factory=tuple)

    @property
    def requirement_tags(self) -> Mapping[str, Tuple[ItemTag, ...]]:
        return DEFAULT_REQUIREMENT_TAGS

@dataclass(frozen=True, kw_only=True)
class GenericSource(ItemSource):
    regions: Tuple[str, ...] = ()
    """No region means it's available everywhere."""

@dataclass(frozen=True)
class CustomRuleSource(ItemSource):
    """Hopefully once everything is migrated to sources, we won't need these custom logic anymore."""
    create_rule: Callable[[Any], StardewRule]

@dataclass(frozen=True, kw_only=True)
class CompoundSource(ItemSource):
    sources: Tuple[ItemSource, ...] = ()

class Tag(ItemSource):
    """Not a real source, just a way to add tags to an item. Will be removed from the item sources during unpacking."""
    tag: Tuple[ItemTag, ...]

    def __init__(self, *tag: ItemTag):
        self.tag = tag  # noqa

    @property
    def add_tags(self):
        return self.tag

@dataclass(frozen=True)
class GameItem:
    name: str
    sources: List[ItemSource] = field(default_factory=list)
    tags: Set[ItemTag] = field(default_factory=set)

    def add_sources(self, sources: Iterable[ItemSource]):
        self.sources.extend(source for source in sources if type(source) is not Tag)
        for source in sources:
            self.add_tags(source.add_tags)

    def add_tags(self, tags: Iterable[ItemTag]):
        self.tags.update(tags)


 {
        proto::SecureAuditShare {
            bit: value.bit().into(),
            seed: value.seed().into(),
            data: value.data().into(),
        }
    }
}

#[cfg(feature = "proto")]
impl<T> TryFrom<proto::AuditShare> for AuditShare<T>
where
    proto::SecureAuditShare: TryInto<T>,
{
    type Error = &'static str;

    fn try_from(value: proto::AuditShare) -> Result<Self, Self::Error> {
        // AuditShare has an optional enum for the token type; this should always be populated.
        let token_enum = value.inner.ok_or("no enum")?;
        // We expect the enum value to be a SecureAuditShare.
        if let proto::audit_share::Inner::Secure(token_proto) = token_enum {
            let token = token_proto.try_into().map_err(|_| "can't convert token")?;
            Ok(AuditShare::new(token))
        } else {
            Err("wrong type")
        }
    }
}

#[cfg(feature = "proto")]
impl<T> From<AuditShare<T>> for proto::AuditShare
where
    T: Into<proto::SecureAuditShare>,
{
    fn from(value: AuditShare<T>) -> Self {
        // The main thing.
        let token = value.token.into();
        // Stuff it in a wrapper.
        let inner = Some(proto::audit_share::Inner::Secure(token));
        proto::AuditShare { inner }
    }
}

#[cfg(feature = "proto")]
impl<G> From<Vec<ElementVector<G>>> for proto::Share
where
    ElementVector<G>: Into<Vec<u8>>,
{
    fn from(values: Vec<ElementVector<G>>) -> Self {
        proto::Share {
            data: values.into_iter().map(Into::into).collect(),
        }
    }
}

#[cfg(feature = "proto")]
impl<G> TryFrom<proto::Share> for Vec<ElementVector<G>>
where
    ElementVector<G>: TryFrom<Vec<u8>>,
{
    type Error = &'static str;

    fn try_from(proto: proto::Share) -> Result<Self, Self::Error> {
        proto
            .data
            .into_iter()
            .map(ElementVector::<G>::try_from)
            .collect::<Result<Vec<_>, _>>()
            .map_err(|_| "conversion failed")
    }
}

use spectrum_primitives::Bytes;

#[cfg(feature = "proto")]
impl TryFrom<proto::Share> for Vec<Bytes> {
    type Error = ();
    fn try_from(share: proto::Share) -> Result<Self, Self::Error> {
        Ok(share.data.into_iter().map(Bytes::from).collect())
    }
}

#[cfg(feature = "proto")]
impl From<Vec<Bytes>> for proto::Share {
    fn from(value: Vec<Bytes>) -> Self {
        proto::Share {
            data: value.into_iter().map(Into::into).collect(),
        }
    }
}
<gh_stars>10-100
mod completion;
mod empty;
mod list;
pub mod put;
mod restore;

use clap::Clap;
use eyre::Result;

#[derive(Clap, Debug)]
pub enum SubCommand {
    /// list valid files in the trash
    List(list::Opt),

    /// Put files into trash. Is run by default if no subcommand is specified.
    Put(put::Opt),

    /// PERMANANTLY removes files in the trash
    Empty(empty::Opt),

    /// Restore files from the trash
    Restore(restore::Opt),

    /// Generates completions for shell
    Completion(completion::Opt),
}

impl Sub


, ((int32_t)il2cpp_codegen_subtract((int32_t)L_6, (int32_t)1)), /*hidden argument*/NULL);
		IL2CPP_RUNTIME_CLASS_INIT(Path_t0B99A4B924A6FDF08814FFA8DD4CD121ED1A0752_il2cpp_TypeInfo_var);
		String_t* L_8 = Path_Combine_mA495A18104786EB450EC0E44EE0FB7F9040C4311(L_7, _stringLiteral9D891E731F75DEAE56884D79E9816736B7488080, /*hidden argument*/NULL);
		String_t* L_9 = Path_Combine_mA495A18104786EB450EC0E44EE0FB7F9040C4311(L_8, _stringLiteralF687604AE801BC390FF2B07BD9AD7ACE07F30862, /*hidden argument*/NULL);
		IL2CPP_RUNTIME_CLASS_INIT(KeyHandler_t06746F66752C259DBB1F52062DC738C02C9AF0E9_il2cpp_TypeInfo_var);
		((KeyHandler_t06746F66752C259DBB1F52062DC738C02C9AF0E9_StaticFields*)il2cpp_codegen_static_fields_for(KeyHandler_t06746F66752C259DBB1F52062DC738C02C9AF0E9_il2cpp_TypeInfo_var))->set_machine_store_9(L_9);
	}

IL_0050:
	{
		IL2CPP_RUNTIME_CLASS_INIT(KeyHandler_t06746F66752C259DBB1F52062DC738C02C9AF0E9_il2cpp_TypeInfo_var);
		String_t* L_10 = ((KeyHandler_t06746F66752C259DBB1F52062DC738C02C9AF0E9_StaticFields*)il2cpp_codegen_static_fields_for(KeyHandler_t06746F66752C259DBB1F52062DC738C02C9AF0E9_il2cpp_TypeInfo_var))->get_machine_store_9();
		return L_10;
	}
}
#ifdef __clang__
#pragma clang diagnostic pop
#endif
#ifdef __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Winvalid-offsetof"
#pragma clang diagnostic ignored "-Wunused-variable"
#endif
// System.Void Microsoft.Win32.Registry::.cctor()
IL2CPP_EXTERN_C IL2CPP_METHOD_ATTR void Registry__cctor_m0508C56FFFB1AFAAA83BA5CCCEB4410C599AA0AA (const RuntimeMethod* method)
{
	static bool s_Il2CppMethodInitialized;
	if (!s_Il2CppMethodInitialized)
	{
		il2cpp_codegen_initialize_method (Registry__cctor_m0508C56FFFB1AFAAA83BA5CCCEB4410C599AA0AA_MetadataUsageId);
		s_Il2CppMethodInitialized = true;
	}
	{
		RegistryKey_t29D81BFF6D6710C7AF7557F80446D514B0AB7574 * L_0 = (RegistryKey_t29D81BFF6D6710C7AF7557F80446D514B0AB7574 *)il2cpp_codegen_object_new(RegistryKey_t29D81BFF6D6710C7AF7557F80446D514B0AB7574_il2cpp_TypeInfo_var);
		RegistryKey__ctor_mF0BC76A01FA608DE3DB30A9674D36E6F3B397E2A(L_0, ((int32_t)-2147483648LL), /*hidd


family: -apple-system, blinkmacsystemfont, "Segoe UI", roboto, sans-serif;
  --tnk-font-mono: "SF Mono", monaco, "Cascadia Code", monospace;

  /* Font Sizes */
  --tnk-text-xs: 11px;
  --tnk-text-sm: 12px;
  --tnk-text-base: 14px;
  --tnk-text-lg: 16px;
  --tnk-text-xl: 18px;
  --tnk-text-2xl: 24px;
  --tnk-text-3xl: 28px;
  --tnk-text-4xl: 36px;

  /* Font Weights */
  --tnk-font-weight-normal: 400;
  --tnk-font-weight-medium: 500;
  --tnk-font-weight-semibold: 600;
  --tnk-font-weight-bold: 700;

  /* Icon Sizes */
  --tnk-icon-sz: 16px;
  --tnk-icon-sz-xs: calc(var(--tnk-icon-sz) * 0.75); /* 12px */
  --tnk-icon-sz-sm: calc(var(--tnk-icon-sz) * 0.875); /* 14px */
  --tnk-icon-sz-md: calc(var(--tnk-icon-sz) * 1.125); /* 18px */
  --tnk-icon-sz-lg: calc(var(--tnk-icon-sz) * 1.25); /* 20px */
  --tnk-icon-sz-xl: calc(var(--tnk-icon-sz) * 1.5); /* 24px */
  --tnk-icon-sz-2xl: calc(var(--tnk-icon-sz) * 2); /* 32px */
  --tnk-icon-sz-3xl: calc(var(--tnk-icon-sz) * 3); /* 48px */

  /* Logo Sizes */
  --tnk-logo-size: 48px;
  --tnk-logo-size-md: 60px;
  --tnk-logo-size-lg: 72px;

  /* Spacing */
  --tnk-space-2xs: 2px;
  --tnk-space-xs: 4px;
  --tnk-space-sm: 8px;
  --tnk-space-md: 12px;
  --tnk-space-lg: 16px;
  --tnk-space-xl: 20px;
  --tnk-space-2xl: 24px;
  --tnk-space-3xl: 32px;
  --tnk-space-4xl: 48px;
  --tnk-space-5xl: 64px;
  --tnk-space-6xl: 80px;
  --tnk-space-7xl: 96px;
  --tnk-space-8xl: 112px;
  --tnk-space-9xl: 128px;
  --tnk-space-10xl: 144px;

  /* Border Radius */
  --tnk-radius-sm: 4px;
  --tnk-radius-md: 6px;
  --tnk-radius-lg: 8px;
  --tnk-radius-xl: 10px;
  --tnk-radius-2xl: 12px;
  --tnk-radius-3xl: 16px;
  --tnk-radius-full: 9999px;

  /* Border Widths */
  --tnk-border-width-hairline: 0.5px; /* 1 device pixel on hi-DPI */
  --tnk-border-width: 1px;
  --tnk-border-width-thick: 2px;
  --tnk-border-width-accent: 3px;

  /* Layout Dimensions */
  --tnk-container-max-width: 1400px;
  --tnk-button-min-width: 120px;
  --tnk-control-label-width: 100px;
  --tnk-search-icon-space: 40px;

  /* Breakpoints */
  --tnk-breakpoint-sm: 640px;
  --tnk-breakpoint-md: 768px;
  --tnk-breakpoint-lg: 1200px;

  /* Transitions */
  --tnk-transition-fast: 0.2s ease;
  --tnk-transition-base: 0.3s ease;
  --tnk-transition-slow: 0.5s ease;

  /* Line Heights */
  --tnk-line-height-tight: 1;
  --tnk-line-height-normal: 1.4;
  --tnk-l


> where
        F: FnOnce() -> D,
        D: Display + Debug + Send + Sync + 'static;
}

impl<T> OptionMethods for Option<T> {
    type TOk = T;

    fn ok_or_error<D>(self, context: D) -> Result<Self::TOk, Error> where
        D: Into<Error>
    {
        self.ok_or(context).map_err(Into::into)
    }

    fn ok_or_else_error<F, D>(self, f: F) -> Result<Self::TOk, Error> where
        F: FnOnce() -> D,
        D: Into<Error>
    {
        self.ok_or_else(|| f().into())
    }

    fn ok_or_error_msg<D>(self, msg: D) -> Result<Self::TOk, Error> where
        D: Display + Debug + Send + Sync + 'static
    {
        self.ok_or_error(err_msg(msg))
    }

    fn ok_or_else_error_msg<F, D>(self, f: F) -> Result<Self::TOk, Error> where
        F: FnOnce() -> D,
        D: Display + Debug + Send + Sync + 'static
    {
        self.ok_or_else_error(|| err_msg(f()))
    }
}
<reponame>zhuxiujia/rbatis<filename>example/src/macro_proc_htmlsql_custom_func.rs<gh_stars>1-10
#[cfg(test)]
mod test {
    use std::fs::File;
    use std::io::Read;
    use rbson::Bson;

    use rbatis::executor::RbatisExecutor;
    use rbatis::rbatis::Rbatis;

    use crate::{BizActivity, init_sqlite};

    pub trait IsTest {
        fn is_test(&self)->bool;
    }
    impl IsTest for rbson::Bson{
        fn is_test(&self) -> bool {
            match self{
                Bson::String(v) => {
                    v.eq("test")
                }
                _ => {
                    false
                }
            }
        }
    }

    ///select page must have  '?:&PageRequest' arg and return 'Page<?>'
    #[html_sql("example/example.html")]
    async fn custom_func(rb: &mut RbatisExecutor<'_, '_>, name: &str) -> Vec<BizActivity> { impled!() }

    #[tokio::test]
    pub async fn test_custom_func() {
        fast_log::init(fast_log::config::Config::new().console());
        //use static ref
        let rb = init_sqlite().await;
        let a = custom_func(&mut rb.as_executor(), "test")
            .await
            .unwrap();
        println!("{:?}", a);
    }
}
<reponame>Atul9/haybale<gh_stars>0
//! Traits which abstract over the backend (BV types, memory implementation,
//! etc) being used.

use boolector::{Btor, BVSolution};
use crate::error::Result;
use std::fmt;
use std::ops::Deref;
use std::rc::Rc;

/// A `Backend` is just a collection of types which together implement the necessary traits
pub trait Backend: Clone {
    type SolverRef: SolverRef<BV=Self::BV>;
    type BV: BV<SolverRef=Self::SolverRef>;
    type Memory: Memory<SolverRef=Self::SolverRef, Index=Self::BV, Value=Self::BV>;
}

/// Trait for something which acts as a reference to a `boolector::Btor` (and
/// possibly may carry other information as well).
///
/// This module provides an implementation of `SolverRef` for `Rc<Btor>`.
pub trait SolverRef: Clone + Deref<Target=Btor> {
    type BV: BV<SolverRef=Self>;
    type Array;

    /// Create a new `Btor` instance, initialize it as necessary, and return a
    /// `S


erProvider(context)
        val glanceIds = manager.getGlanceIds(glanceAppWidget.javaClass)

        val systemWidgetIds = glanceIds.map { manager.getAppWidgetId(it) }

        val entitiesPerServer = getWidgetEntitiesByServer(context)

        val invalidWidgetIds = entitiesPerServer.keys.minus(systemWidgetIds)

        if (invalidWidgetIds.isNotEmpty()) {
            Timber.tag(widgetClassName).i(
                "Found widgets $invalidWidgetIds in database, but not in AppWidgetManager - removing it from the database.",
            )
            deleteWidgetsFromDatabase(invalidWidgetIds.toIntArray())
        }

        val entitiesPerServerWithoutInvalid = entitiesPerServer - invalidWidgetIds

        return entitiesPerServerWithoutInvalid
    }

    /**
     * From https://cs.android.com/androidx/platform/frameworks/support/+/a2cb47e01ac0b5f3427ef4e61719c0f1aaba4fc1:glance/glance-appwidget/src/main/java/androidx/glance/appwidget/GlanceAppWidget.kt;l=78
     *
     * Note: [update] and [updateAll] do not restart `provideGlance` if it is already running. As a
     * result, you should load initial data before calling `provideContent`, and then observe your
     * sources of data within the composition (e.g. [androidx.compose.runtime.collectAsState]). This
     * ensures that your widget will continue to update while the composition is active. When you
     * update your data source from elsewhere in the app, make sure to call `update` in case a
     * Worker for this widget is not currently running.
     */
    private suspend fun updateView(context: Context, appWidgetId: Int) {
        val manager = glanceManagerProvider(context)
        if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) {
            val glanceId = manager.getGlanceIdBy(appWidgetId)

            glanceAppWidget.update(context, glanceId)
        } else {
            glanceAppWidget.updateAll(context)
        }
    }

    /**
     * Implement this method to provide the mapping of widget IDs to their associated entities and server.
     */
    internal abstract suspend fun getWidgetEntitiesByServer(context: Context): Map<Int, EntitiesPerServer>

    /**
     * Invoked when an entity update is received. After this callback the [updateView] is invoked.
     */
    internal open suspend fun onEntityUpdate(context: Context, appWidgetId: Int, entity: Entity) {}
}
package io.homeassistant.companion.android.settings.qs

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.platform.ComposeView
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import com.mikepenz.iconics.typeface.IIcon
import dagger.hilt.android.AndroidEntryPoint
import io.homeassistant.companion.android.common.R as commonR
import io.homeassistant.companion.android.common.data.integration.EntityExt
import io.homeassistant.companion.android.settings.addHelpMenuProvider
import io.homeassistant.companion.android.settings.qs.views.ManageTilesView
import io.homeassistant.companion.android.util.compose.HomeAssistantAppTheme
import io.homeassistant.companion.android.util.icondialog.IconDialog
import timber.log.Timber

@AndroidEntryPoint
class ManageTilesFragment : Fragment() {

    companion object {
        val validDomains = EntityExt.APP_PRESS_ACTION_DOMAINS
    }

    val viewModel: ManageTilesViewModel by viewModels()

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
        return ComposeView(requireContext()).apply {
            setContent {
                HomeAssistantAppTheme {
                    var showingDialog by remember { mutableStateOf(false) }

                    if (showingDialog) {


    if (variable.isSynthetic) return;
    var declaredElement = variable.declaredFragment?.element;
    if (declaredElement == null ||
        context.typeSystem.isNonNullable(declaredElement.type)) {
      return;
    }
    lateables.putIfAbsent(currentLibraryFragment, () => []).add(variable);
  }

  /// Checks whether [expression], which must be an [Identifier] or
  /// [PropertyAccess], and its [canonicalElement], represent a nullable access.
  void _visitIdentifierOrPropertyAccess(
    Expression expression,
    Element? canonicalElement,
  ) {
    assert(expression is Identifier || expression is PropertyAccess);
    if (canonicalElement == null) return;

    var parent = expression.parent;
    if (parent is Expression) {
      parent = parent.unParenthesized;
    }
    if (expression is SimpleIdentifier && expression.inDeclarationContext()) {
      // This is OK.
    } else if (parent is PostfixExpression &&
        parent.operand == expression &&
        parent.operator.type == TokenType.BANG) {
      // This is OK; non-null access.
    } else {
      nullableAccess.add(canonicalElement.baseElement);
    }
  }
}
// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'package:analyzer/analysis_rule/rule_context.dart';
import 'package:analyzer/analysis_rule/rule_visitor_registry.dart';
import 'package:analyzer/dart/analysis/features.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';
import 'package:analyzer/error/error.dart';

import '../analyzer.dart';

const _desc = r"Don't have a library name in a `library` declaration.";

class UnnecessaryLibraryName extends LintRule {
  UnnecessaryLibraryName()
    : super(name: LintNames.unnecessary_library_name, description: _desc);

  @override
  DiagnosticCode get diagnosticCode => LinterLintCode.unnecessaryLibraryName;

  @override
  void registerNodeProcessors(
    RuleVisitorRegistry registry,
    RuleContext context,
  ) {
    if (!context.isFeatureEnabled(Feature.unnamedLibraries)) return;

    var visitor = _Visitor(this);
    registry.addLibraryDirective(this, visitor);
  }
}

class _Visitor extends SimpleAstVisitor<void> {
  final LintRule rule;

  _Visitor(this.rule);

  @override
  void visitLibraryDirective(LibraryDirective node) {
    var name = node.name;
    if (name != null) {
      rule.reportAtNode(name);
    }
  }
}
// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'package:analyzer/analysis_rule/rule_context.dart';
import 'package:analyzer/analysis_rule/rule_visitor_registry.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/error/error.dart';

import '../analyzer.dart';

const _desc =
    r"Don't reassign references to parameters of functions or methods.";

bool _isDefaultFormalParameterWithDefaultValue(FormalParameter parameter) =>
    parameter is DefaultFormalParameter && parameter.defaultValue != null;

bool _isFormalParameterReassigned(
  FormalParameter parameter,
  AssignmentExpression assignment,
) {
  var leftHandSide = assignment.leftHandSide;
  return leftHandSide is SimpleIdentifier &&


import os
import sys
import openai

def chatgpt(question, lang, format):
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": "You are a chatbot"},
            {"role": "system", "content": f"Answer in {lang}"},
            {"role": "system", "content": f"Format in {format}"},
            {"role": "user", "content": f"{question}"}
        ]
    )
    return response['choices'][0]['message']['content']

def translate(text, toLang):
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": "You are a chatbot"},
            {"role": "system", "content": f"Answer in {toLang}"},
            {"role": "system", "content": f"Format in {format}"},
            {"role": "user", "content": f"Translate the following text to {toLang}\n\n{text}"}
        ]
    )
    result = response['choices'][0]['message']['content']
    return result

openai.api_key = os.getenv("OPENAI_API_KEY")

opList = ['quit', 'chatgpt', 'load', 'save', 'shell', 'translate', 'history']

narg = len(sys.argv)
user = sys.argv[1] if narg > 1 else 'user'
lang = sys.argv[2] if narg > 2 else '繁體中文'
format = sys.argv[3] if narg > 3 else 'Markdown+LaTex, add space before and after $..$'
print(f'Welcome {user} to shellgpt. You may use to following commands')
print(f'1. chatgpt <question>\n2. load <file>\n3. save <file>\n4. translate\n5. history\n6. quit\n')

response = None
question = None
commandList = []
while True:
    command = input('\ncommand> ')
    print('')
    commandList.append(command)
    args = command.split()
    if len(args) == 0: continue
    op = args[0]
    tail = ' '.join(args[1:])
    if op not in opList:
        print(f'Operation error, only {opList} allowed!')
        continue
    if op == 'chatgpt':
        question = tail
        response = chatgpt(question, lang, format)
        print(response)
    if op == 'quit': break
    if op == 'shell':
        os.system(tail)
    if op == 'load':
        fname = args[1]
        with open(fname, encoding='utf-8') as fh:
            response = fh.read()
        print(response)
    if op == 'save':
        if response is None:
            print('errro: no response to save!')
        else:
            fname = args[1]
            with open(fname, 'a+', encoding='utf-8') as file:
                file.write(response)
    if op == 'translate':
        toLang = args[1] if len(args) > 1 else lang
        response = translate(response, toLang)
        print(response)
    if op == 'history':
        for i in range(len(commandList)):
            print(f'{i}:{commandList[i]}')


过滤"
L["Equipment"] = "装备"
L["Equipped bags"] = "已装备背包"
L["Exclude list"] = "排除列表"
L["Filter"] = "过滤"
L["Filtering information"] = "过滤信息"
L["Filters"] = "过滤器"
L["Filters are used to dispatch items in bag sections. One item can only appear in one section. If the same item is selected by several filters, the one with the highest priority wins."] = "过滤器将用于背包分类中调度物品, 一件物品仅可在一个分类中显示. 如果在多个过滤器中选中相同的物品, 将使用最高优先级."
L["Font"] = "字型"
L["Four general sections."] = "按护甲类型分组"
L["Free space"] = "空闲空间"
L["Free space / total space"] = "空闲 / 总空间"
L["Gear manager item sets"] = "套装管理"
L["GEM_BAG_TAG"] = "宝"
L["Gems are trade goods"] = "宝石是商品"
L["Glyphs are trade goods"] = "铭文是商品"
L["HERB_BAG_TAG"] = "草"
L["Hide the colored corner shown when you move the bag."] = "当移动背包时隐藏边框着色。" -- Needs review
L["Hide zeroes"] = "隐藏零"
L["Highlight color"] = "高亮颜色"
L["Highlight scale"] = "高亮缩放"
L["Ignore currencies with null amounts."] = "忽略货币的无效量。"
L["Ignore heirloom items"] = "忽略传家宝" -- Needs review
L["Ignore low quality items"] = "忽略劣质物品" -- Needs review
L["Included categories"] = "包含过滤"
L["Include list"] = "包含列表"
L["... including incomplete stacks"] = "包含不完整堆叠"
L["INSCRIPTION_BAG_TAG"] = "铭"
L["Insets"] = "插图"
L["Item"] = "物品"
L["Item category"] = "物品类别"
L["Item information"] = "物品信息"
L["Item level"] = "物品等级" -- Needs review
L["Items"] = "物品"
L["Items in this list are always considered as junk. Click an item to remove it from the list."] = "此列表物品将不被归类为垃圾. 点击可移除."
L["Items in this list are never considered as junk. Click an item to remove it from the list."] = "此列表物品将不被归类为垃圾. 点击可移除."
L["Jewelry"] = "饰品"
L["Junk category"] = "垃圾"
L["Keep all stacks together."] = "将所有堆叠合并"
L["KEYRING_TAG"] = "钥"
L["LDB Plugin"] = "LDB 组件"
L["LEATHERWORKING_BAG_TAG"] = "皮"
L["Lock anchor"] = "锁定锚点"
L["Low quality items"] = "劣质物品"
L["Manual"] = "手动"
L["Manual filtering"] = "手动过滤"
L["Maximum bag height"] = "最大背包高度"
L["Maximum stack size"] = "最大堆叠"
L["Merge bag types"] = "合并背包类型"
L["Merged sets"] = "合并套装"
L["Merge free space"] = "合并空间"
L["


, HEIGHT, 1, 1, test_results);
    TEST<uint64_t>("test64_littleendian.tif", image64.data(), image64i.data(), WIDTH, HEIGHT, 1, 1, test_results);
    TEST<uint64_t>("test64_bigendian.tif", image64.data(), image64i.data(), WIDTH, HEIGHT, 1, 1, test_results);

    //TEST_AGAINST_LIBTIFF<uint16_t>("2K_source_Stack.tif",  test_results);
    //TEST_AGAINST_LIBTIFF<uint16_t>("2K_tiff_image.tif",  test_results);
    TEST_AGAINST_LIBTIFF<uint8_t>("cell.tif",  test_results);
    //TEST_AGAINST_LIBTIFF<uint8_t>("circuit.tif",  test_results);
    //TEST_AGAINST_LIBTIFF<uint8_t>("galaxy.tif",  test_results);
    //TEST_AGAINST_LIBTIFF<uint8_t>("mri.tif",  test_results);
    TEST_AGAINST_LIBTIFF<uint8_t>("multi-channel-time-series.ome.tif",  test_results);
    TEST_AGAINST_LIBTIFF<uint16_t>("test16m_imagej.tif",  test_results);
    TEST_AGAINST_LIBTIFF<float>("imagej_32bit_ramp.tif",  test_results);
    //TEST_AGAINST_LIBTIFF<uint8_t>("imagej_32bit_ramp_tiled.tif",  test_results);
    TEST_AGAINST_LIBTIFF<uint8_t>("circuit_nocompression.tif",  test_results);
    //TEST_AGAINST_LIBTIFF<uint8_t>("mri_nocompression.tif",  test_results);
    TEST_AGAINST_LIBTIFF<uint8_t>("galaxy_nocompression.tif",  test_results);
    TEST_AGAINST_LIBTIFF<uint8_t>("corel_photopaint_grey.tif",  test_results);
    TEST_AGAINST_LIBTIFF<uint16_t>("corel_photopaint_grey16.tif",  test_results);
    TEST_AGAINST_LIBTIFF<uint8_t>("corel_photopaint_greyalpha.tif",  test_results);
    TEST_AGAINST_LIBTIFF<uint8_t>("corel_photopaint_rgb.tif",  test_results);
    TEST_AGAINST_LIBTIFF<uint16_t>("corel_photopaint_rgb48.tif",  test_results);
    TEST_AGAINST_LIBTIFF<uint8_t>("corel_photopaint_rgba.tif",  test_results);
    //TEST_AGAINST_LIBTIFF<uint8_t>("gh19-id8.tif",  test_results);
#else
    //TEST_SIMPLE<uint16_t>("2K_source_Stack.tif",  test_results);
    //TEST_SIMPLE<uint16_t>("2K_tiff_image.tif",  test_results);
    TEST_SIMPLE<uint8_t>("cell.tif",  test_results);
    TEST_SIMPLE<uint8_t>("circuit.tif",  test_results);
    TEST_SIMPLE<uint8_t>("galaxy.tif",  test_results);
    TEST_SIMPLE<uint8_t>("mri.tif",  test_results);
    TEST_SIMPLE<uint8_t>("multi-channel-time-series.ome.tif",  test_results);
    TEST_SIMPLE<uint16_t>("test16m_imagej.tif",  test_results);
    TEST_SIMPLE<float>("imagej_32bit_ramp.tif",  test_results);
    TEST_SIMPLE<uint8_t>("imagej_32bit_ramp_tiled.tif",  test_results);
    TEST_SIMPLE<uint8_t>("circuit_nocompression.tif",  test_results);
    TEST_SIMPLE<uint8_t>("mri_nocompression.tif",  test_results);
    TEST_SIMPLE<uint8_t>("galaxy_nocompression.tif",  t


Run(fmt.Sprintf("%v", tc), func(t *testing.T) {
			runUnreplicatedTruncatedState(t, tc)
		})
	}
}

func runUnreplicatedTruncatedState(t *testing.T, tc unreplicatedTruncStateTest) {
	ctx := context.Background()

	const (
		rangeID    = 12
		term       = 10
		firstIndex = 100
	)

	evalCtx := &MockEvalCtx{
		Desc:       &roachpb.RangeDescriptor{RangeID: rangeID},
		Term:       term,
		FirstIndex: firstIndex,
	}

	eng := storage.NewDefaultInMem()
	defer eng.Close()

	truncState := roachpb.RaftTruncatedState{
		Index: firstIndex + 1,
		Term:  term,
	}

	// Put down the TruncatedState specified by the test case.
	putTruncatedState(t, eng, rangeID, truncState, tc.startsWithLegacy)

	// Send a truncation request.
	req := roachpb.TruncateLogRequest{
		RangeID: rangeID,
		Index:   firstIndex + 7,
	}
	cArgs := CommandArgs{
		EvalCtx: evalCtx.EvalContext(),
		Args:    &req,
	}
	resp := &roachpb.TruncateLogResponse{}
	res, err := TruncateLog(ctx, eng, cArgs, resp)
	if err != nil {
		t.Fatal(err)
	}

	expTruncState := roachpb.RaftTruncatedState{
		Index: req.Index - 1,
		Term:  term,
	}

	legacy, unreplicated := readTruncStates(t, eng, rangeID)

	switch tc.exp {
	case expectationLegacy:
		assert.Equal(t, expTruncState, legacy)
		assert.Zero(t, unreplicated)
	case expectationUnreplicated:
		// The unreplicated key that we see should be the initial truncated
		// state (it's only updated below Raft).
		assert.Equal(t, truncState, unreplicated)
		assert.Zero(t, legacy)
	case expectationNeither:
		assert.Zero(t, unreplicated)
		assert.Zero(t, legacy)
	default:
		t.Fatalf("unknown expectation %d", tc.exp)
	}

	assert.NotNil(t, res.Replicated.State)
	assert.NotNil(t, res.Replicated.State.TruncatedState)
	assert.Equal(t, expTruncState, *res.Replicated.State.TruncatedState)
}
// Copyright 2017 The Cockroach Authors.
// Copyright (c) 2022-present, Shanghai Yunxi Technology Co, Ltd. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// This software (KWDB) is licensed under Mulan PSL v2.
// You can use this software according to the terms and conditions of the Mulan PSL v2.
// You may obtain a copy of Mulan PSL v2 at:
//          http://license.coscl.org.cn/MulanPSL2
// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
// MERCHANTABILITY OR FIT FOR A PAR


e;
        case r'no_permission': return AssetIdsResponseDtoErrorEnum.noPermission;
        case r'not_found': return AssetIdsResponseDtoErrorEnum.notFound;
        default:
          if (!allowNull) {
            throw ArgumentError('Unknown enum value to decode: $data');
          }
      }
    }
    return null;
  }

  /// Singleton [AssetIdsResponseDtoErrorEnumTypeTransformer] instance.
  static AssetIdsResponseDtoErrorEnumTypeTransformer? _instance;
}

//
// AUTO-GENERATED FILE, DO NOT MODIFY!
//
// @dart=2.12

// ignore_for_file: unused_element, unused_import
// ignore_for_file: always_put_required_named_parameters_first
// ignore_for_file: constant_identifier_names
// ignore_for_file: lines_longer_than_80_chars

part of openapi.api;

class TranscodeHWAccel {
  /// Instantiate a new enum with the provided [value].
  const TranscodeHWAccel._(this.value);

  /// The underlying value of this enum member.
  final String value;

  @override
  String toString() => value;

  String toJson() => value;

  static const nvenc = TranscodeHWAccel._(r'nvenc');
  static const qsv = TranscodeHWAccel._(r'qsv');
  static const vaapi = TranscodeHWAccel._(r'vaapi');
  static const rkmpp = TranscodeHWAccel._(r'rkmpp');
  static const disabled = TranscodeHWAccel._(r'disabled');

  /// List of all possible values in this [enum][TranscodeHWAccel].
  static const values = <TranscodeHWAccel>[
    nvenc,
    qsv,
    vaapi,
    rkmpp,
    disabled,
  ];

  static TranscodeHWAccel? fromJson(dynamic value) => TranscodeHWAccelTypeTransformer().decode(value);

  static List<TranscodeHWAccel>? listFromJson(dynamic json, {bool growable = false,}) {
    final result = <TranscodeHWAccel>[];
    if (json is List && json.isNotEmpty) {
      for (final row in json) {
        final value = TranscodeHWAccel.fromJson(row);
        if (value != null) {
          result.add(value);
        }
      }
    }
    return result.toList(growable: growable);
  }
}

/// Transformation class that can [encode] an instance of [TranscodeHWAccel] to String,
/// and [decode] dynamic data back to [TranscodeHWAccel].
class TranscodeHWAccelTypeTransformer {
  factory TranscodeHWAccelTypeTransformer() => _instance ??= const TranscodeHWAccelTypeTransformer._();

  const TranscodeHWAccelTypeTransformer._();

  String encode(TranscodeHWAccel data) => data.value;

  /// Decodes a [dynamic value][data] to a TranscodeHWAccel.
  ///
  /// If [allowNull] is true and the [dynamic value][data] cannot be decoded successfully,
  /// then null is returned. However, if [allowNull] is false and the [dynamic value][data]
  /// cannot be decoded successfully, then an [UnimplementedError] is thrown.
  ///
  /// The [allowNull] is very handy when an API changes and a new enum value is added or removed,
  /// and users are still using an old app with the old code.
  TranscodeHWAccel? decode(dynamic data, {bool allowNull = true}) {
    if (data != null) {
      switch (data) {
        case r'nvenc': return TranscodeHWAccel.nvenc;
        case r'qsv': return TranscodeHWAccel.qsv;
        case r'vaapi': return TranscodeHWAccel.vaapi;
        case r'rkmpp': return TranscodeHWAccel.rkmpp;
        case r'disabled': return TranscodeHWAccel.disabled;
        default:
          if (!allowNull) {
            throw ArgumentError('Unknown enum value to decode: $data');
          }
      }
    }
    return null;


te) => false;
}
import 'package:loggy/loggy.dart';

/// We can also add new [LogLevel] to the Loggy that is not in the lib.
/// Here we add new [WtfLevel] with priority of 32 (2^5), meaning it's has more
/// priority than error (16 (2^4)).
const LogLevel socketLevel = LogLevel('Socket', 32);

/// We can also add short version of log for our newly created [LogLevel]
extension SocketLoggy on Loggy {
  void socket(dynamic message, [Object? error, StackTrace? stackTrace]) =>
      log(socketLevel, message, error, stackTrace);
}

/// We can also extend our [PrettyPrinter] and add our colors and prefix to
/// new level, or even change the existing ones.
class PrettySocketPrinter extends PrettyPrinter {
  const PrettySocketPrinter({bool? showColors}) : super(showColors: showColors);

  @override
  AnsiColor? levelColor(LogLevel level) {
    if (level == socketLevel) {
      return AnsiColor(foregroundColor: 141);
    }
    return super.levelColor(level);
  }

  @override
  String? levelPrefix(LogLevel level) {
    if (level == socketLevel) {
      return '👾 ';
    }
    return super.levelPrefix(level);
  }
}
import 'package:loggy/loggy.dart';

import 'extra_loggers.dart';
import 'socket_level.dart';

void main() {
  Loggy.initLoggy(
    logPrinter: const PrettyPrinter(
      showColors: true,
    ),
    logOptions: const LogOptions(
      LogLevel.all,
      stackTraceLevel: LogLevel.off,
    ),
    filters: [
      BlacklistFilter([BlacklistedLoggy]),
    ],
  );

  ExampleNetworkLoggy();
  print('');
  ExampleUiLoggy();
  print('');
  ExampleBlackListedLoggy();
  print('');
  ExampleWhatLoggyCanDo();

  print('');
  logDebug('I\'m a global loggy');
  logInfo('Global loggy has less options but does not need mixins');
  logError('I share properties set in initLoggy');
}

class ExampleNetworkLoggy with NetworkLoggy {
  ExampleNetworkLoggy() {
    loggy.debug('This is log from Network logger');
    print('Test print statement, style should be reset!');
    loggy.info('This is log from Network logger');
    print('Test print statement, style should be reset!');
    loggy.warning('This is log from Network logger');
    print('Test print statement, style should be reset!');
    loggy.error('This is log from Network logger');
    print('Test print statement, style should be reset!');

    loggy.socket('This is log with custom log level in Network logger');
  }
}

class ExampleUiLoggy with UiLoggy {
  ExampleUiLoggy() {
    loggy.warning('This is log from UI logger');
    loggy.warning('This is log from UI logger');
    loggy.warning('This is log from UI logger');
    loggy.warning('This is log from UI logger');

    loggy.socket('This is log with custom log level in UI logger');
  }
}

class ExampleBlackListedLoggy with BlacklistedLoggy {
  ExampleBlackListedLoggy() {
    loggy
        .info('This log is from Blacklisted logger and should not be visible!');
    loggy.warning(
        'This log is from Blacklisted logger and should not be visible!');
  }
}

class ExampleWhatLoggyCanDo with ExampleLoggy {
  ExampleWhatLoggyCanDo() {
    /// This will evaluate only if line is actually logged
    loggy.info('Loggy can do some stuff:');
    loggy.info(
        'You can pass function to the logger, it will evaluate only if log gets shown');
    loggy.debug(() {
      /// You can log in log
      loggy.warning


nknown`, `wasm32v1-none` | [`Crypto.getRandomValues`]. Requires feature `wasm_js` ([see below](#webassembly-support)).
| `efi_rng`         | UEFI                 | `*-unknown‑uefi`         | [`EFI_RNG_PROTOCOL`] with `EFI_RNG_ALGORITHM_RAW` (requires `std` and Nigthly compiler)
| `custom`          | All targets          | `*`                      | User-provided custom implementation (see [custom backend])

Opt-in backends can be enabled using the `getrandom_backend` configuration flag.
The flag can be set either by specifying the `rustflags` field in [`.cargo/config.toml`]:
```toml
# It's recommended to set the flag on a per-target basis:
[target.wasm32-unknown-unknown]
rustflags = ['--cfg', 'getrandom_backend="wasm_js"']
```

Or by using the `RUSTFLAGS` environment variable:

```sh
RUSTFLAGS='--cfg getrandom_backend="linux_getrandom"' cargo build
```

Enabling an opt-in backend will replace the backend used by default. Doing this for
an incorrect target (e.g. using `linux_getrandom` while compiling for a Windows target)
will result in a compilation error. Be extremely careful while using opt-in backends,
as incorrect configuration may result in vulnerable applications or applications
that always panic.

Note that using an opt-in backend in a library (e.g. for tests or benchmarks)
WILL NOT have any effect on its downstream users.

[`.cargo/config.toml`]: https://doc.rust-lang.org/cargo/reference/config.html

### Raw Linux syscall support

Currently the `linux_raw` backend supports only targets with stabilized `asm!` macro,
i.e. `arm`, `aarch64`, `loongarch64`, `riscv32`, `riscv64`, `s390x`, `x86`, and `x86_64`.

Note that the raw syscall backend may be slower than backends based on `libc::getrandom`,
e.g. it does not implement vDSO optimizations and on `x86` it uses the infamously slow
`int 0x80` instruction to perform syscall.

### WebAssembly support

This crate fully supports the [WASI] and [Emscripten] targets. However,
the `wasm32-unknown-unknown` target (i.e. the target used by `wasm-pack`)
is not automatically supported since, from the target name alone, we cannot deduce
which JavaScript interface should be used (or if JavaScript is available at all).

To enable `getrandom`'s functionality on `wasm32-unknown-unknown` using the Web
Crypto methods [described above][opt-in] via [`wasm-bindgen`], do
*both* of the following:

-   Use the `wasm_js` feature flag, i.e.
    `getrandom = { version = "0.3", features = ["wasm_js"] }`.
    On its own, this only makes the backend available. (As a side effect this
    will make your `Cargo.lock` significantly larger if you are not already
    using [`wasm-bindgen`], but otherwise enabling this feature is harmless.)
-   Set `RUSTFLAGS='--cfg getrandom_backend="wasm_js"'` ([see above][opt-in]).

This backend supports both web browsers (main window and Web Workers)
and Node.js (v19 or later) environments.

WARNING: It is highly recommended to enable the `wasm_js` feature only for
binary crates and tests, i.e. avoid unconditionally enabling it in library crates.

### Custom backend

If this crate does not support your target out of the box or you have to use
a non-default entropy


ype = 5
    else
        _type = 0
    end

    local base = PauseMenuItem.New(textLeft)
    base.Type = _type
    base.TextRight = textRight or ""
    base.Icon = icon or BadgeStyle.NONE
    base.IconColor = iconColor or SColor.HUD_White
    base.Tick = tick or false
    base.CrewTag = crewTag
    base._rightLabelFont = ScaleformFonts.CHALET_LONDON_NINETEENSIXTY

    return setmetatable(base, UIMenuFreemodeDetailsItem)
end

function UIMenuFreemodeDetailsItem:SetLabelsFonts(leftFont, rightFont)
    if leftFont then
        self.LabelFont = leftFont
    end
    if rightFont then
        self._rightLabelFont = rightFont
    end
end