      0xE5 (229)⚠ [5]
      0x83 (131)
      0x00 (0)⚠
      ❌ N/A [6]

      "F21"
      0x84 (132)
      0x84 (132)
      0x00 (0)⚠ [7]
      ❌ N/A [4]
      0x00 (0)⚠ [7]
      0x84 (132)
      ❌ N/A [8]
      ❌ N/A [6]

      "F22"
      0x85 (133)
      0x85 (133)
      0x00 (0)⚠ [7]
      ❌ N/A [4]
      0x00 (0)⚠ [7]
      0x85 (133)
      ❌ N/A [8]
      ❌ N/A [6]

      "F23"
      0x86 (134)
      0x86 (134)
      0x00 (0)⚠ [7]
      ❌ N/A [4]
      0x00 (0)⚠ [7]
      0x86 (134)
      ❌ N/A [8]
      ❌ N/A [6]

      "F24"
      0x87 (135)
      0x87 (135)
      0x00 (0)⚠ [7]
      ❌ N/A [4]
      0x00 (0)⚠ [7]
      0x87 (135)
      ❌ N/A [8]
      0x00 (0)⚠ [3]

        {{domxref("KeyboardEvent.code")}}

      Windows
      Windows
      Mac (10.9)
      Linux (Ubuntu 14.04)
      Mac (10


0);
  } catch (e) {
    Expect.equals(1, 1);
  }
  try {
    var str = File('').resolveSymbolicLinksSync();
    Expect.equals(1, 0);
  } catch (e) {
    Expect.equals(1, 1);
  }
}

Future<void> testType() async {
  try {
    var val = await FileSystemEntity.isDirectory('');
    Expect.equals(1, 0);
  } catch (e) {
    Expect.equals(1, 1);
  }
  try {
    var val = FileSystemEntity.isDirectorySync('');
    Expect.equals(1, 0);
  } catch (e) {
    Expect.equals(1, 1);
  }
}

Future<void> testIdentical() async {
  try {
    var val = await FileSystemEntity.identical('', 'test');
    Expect.equals(1, 0);
  } catch (e) {
    Expect.equals(1, 1);
  }
  try {
    var val = FileSystemEntity.identicalSync('test', '');
    Expect.equals(1, 0);
  } catch (e) {
    Expect.equals(1, 1);
  }
}

main() async {
  await testOpen();
  await testExists();
  await testCreate();
  await testCreateLink();
  await testDelete();
  await testDeleteLink();
  await testRename();
  await testCopy();
  await testLength();
  await testStat();
  await testResolveSymbolicLinks();
  await testType();
  await testIdentical();
}
// Copyright (c) 2013, 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.

// OtherResources=stdio_implicit_close_script.dart

import "package:expect/async_helper.dart";
import "package:expect/expect.dart";
import "dart:io";

void test({required bool closeStdout, required bool closeStderr}) {
  var scriptFile = "stdio_implicit_close_script.dart";
  var script = Platform.script.resolve(scriptFile).toFilePath();

  var arguments = <String>[]
    ..addAll(Platform.executableArguments)
    ..add(script);
  if (closeStdout) arguments.add("stdout");
  if (closeStderr) arguments.add("stderr");

  asyncStart();
  Process.run(Platform.executable, arguments).then((result) {
    print(result.stdout);
    print(result.stderr);
    Expect.equals(0, result.exitCode);

    Expect.isTrue(result.stdout.contains("APPLE"));
    Expect.isTrue(result.stderr.contains("BANANA"));

    asyncEnd();
  });
}

void main() {
  asyncStart();
  test(closeStdout: false, closeStderr: false);
  test(closeStdout: false, closeStderr: true);
  test(closeStdout: true, closeStderr: false);
  test(closeStdout: true, closeStderr: true);
  asyncEnd();
}
// Copyright (c) 2021, 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.
//
// VMOptions=--dwarf-stack-traces --save-debugging-info=$TEST_COMPILATION_DIR/socket_connect_debug.so
//
// Tests stack trace on socket exceptions.
//

import "dart:async";
import "d


csxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo
// SIG // aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK
// SIG // ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJTAjBgNVBAsT
// SIG // HE1pY3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlvbnMxJzAl
// SIG // BgNVBAsTHm5TaGllbGQgVFNTIEVTTjpBOTM1LTAzRTAt
// SIG // RDk0NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3Rh
// SIG // bXAgU2VydmljZaIjCgEBMAcGBSsOAwIaAxUA77vIZIRD
// SIG // LeWfC3Xn5bO89S1VPKaggYMwgYCkfjB8MQswCQYDVQQG
// SIG // EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
// SIG // BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv
// SIG // cnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGlt
// SIG // ZS1TdGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQsFAAIF
// SIG // AOui48UwIhgPMjAyNTA0MTEwMDQxNDFaGA8yMDI1MDQx
// SIG // MjAwNDE0MVowdDA6BgorBgEEAYRZCgQBMSwwKjAKAgUA
// SIG // 66LjxQIBADAHAgEAAgIY4DAHAgEAAgIT9TAKAgUA66Q1
// SIG // RQIBADA2BgorBgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZ
// SIG // CgMCoAowCAIBAAIDB6EgoQowCAIBAAIDAYagMA0GCSqG
// SIG // SIb3DQEBCwUAA4IBAQBXY4IEKtP1liP6HPOuXNRCFHn1
// SIG // UiLOezhp1CF9/dAabgYrr0Kh11ToMt0AP1l+ykbuvzzM
// SIG // JmGGAyDBC1hQ5K3I3y8CZSbFl2GIfDBpKdeVf8Gml93F
// SIG // MP80MtqAzkWOJZqiwyb+zQ2WreTSmh7pZ2XGSlxplGwW
// SIG // eEEuh8dB0AUxiaPJnQnwfoQrYrOhCc4Fuea/78E3vT0s
// SIG // teOIkpF3z+qKv2U+jh6NCFZStoD6M2SjeD4M8sG2zL5m
// SIG // 0DB4d0wBS32RqXbZAE+fvYA0GuuYgPHV2SwDtcyZJ7lT
// SIG // 9H+gz3HTlEjXvyWWx0GtJ6tM6ASGbR+KZyLxrZ4378a4
// SIG // O5CdcJI9MYIEDTCCBAkCAQEwgZMwfDELMAkGA1UEBhMC
// SIG // VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
// SIG // B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
// SIG // b3JhdGlvbjEmMC


族也跟他们接近。

   凯：中国西双版纳的人可能跟我们是一个民族。

   主席：人口不多？

   凯：不多。

   主席：广西的壮族呢？

   凯：广西壮族的语言在生活方面跟我们通一点。

   主席：有点汉化了。

   凯：现在广西的壮话很多汉话。

   主席：叫他们老挝化好了。

   黄：老挝苗族不少。

   凯：北尞很多苗族。我们川圹是苗族最集中的一块地方，人比较多。桑怒、丰沙里、琅勃拉邦、乌多姆赛、沙耶武里、万象都有苗族分布。

   主席：有几10万人？

   凯：大概有20万人。

   黄：老挝的苗族跟广西的苗族是一样的。

   主席：你怎么知道？

   黄：我调查过。

   林：他在广东工作了很长时间。

   主席：他是广东的司令员。

   历史上大汉族主义可厉害了，强迫少数民族同化，不同化就打。所以，苗族、瑶族、壮族、彝族历史上不晓得受过多少战争，可是他们能打。汉族人多，欺负他们。

   凯：我们那里苗族人也能打仗。所以，现在美国人利用苗族人建立了一支“特种部队”，企图长期利用这支力量来破坏老挝革命。

   主席：要打到泰国去：

   周：泰国参加打老挝、柬埔寨，它已经突破了国界嘛！

   主席：泰国人口多，3000万。不晓得泰国是什么族。

   周：基本上是泰族。

   主席：历史上战争没有断过。我前次同黎笋同志说过，看来这个世界不那么和平。世界上还有帝国主义要捣乱。各国人民我看也快起来了，


local
function print_graph2(node, visited, indent)
    if visited[node] then
        print(indent..node.name.." [cycle]")
    else
        print(indent..node.name)
        visited[node] = true
        for i, child in node:child_pairs() do
            assert(child == node:child(i))
            print_graph2(child, visited, indent.."  ")
        end
        visited[node] = nil
    end
end

local
function print_graph(root)
    print_graph2(root, {}, "")
end

local node =
    am.bind{C = vec4(4)}:tag'nodeC'
    ^am.bind{B = vec3(3)}:tag"nodeB"
    ^am.bind{A = vec2(2)}:tag"nodeA"
    ^am.group():tag"base"

node"nodeC".name = "C"
node'nodeC'.fc = "CC"
node[[nodeB]].name = "B"
node"nodeB".fb = "BB"
node"nodeA".name = "A"
node"nodeA".fa = "AA"
node"base".name = "base"

print(node"nodeA".name..":"..node"nodeA".name)
print(node"nodeB".name..":"..node"nodeB".name)
print(node"nodeC".name..":"..node"nodeC".name)
print(node"base".name)

print(node'nodeA'.fa)
print(node"nodeB".fb)
print(node[[nodeC]].fc)

local child, parent = node"nodeB"
print(child.name)
print(parent.name)

print("")
print_graph(node)

local nodeD = am.


v0
  uqxtn.8b    v0, v0
  urecpe.2s   v0, v0
  ursqrte.2s  v0, v0
  usqadd.8b   v0, v0
  xtn.8b      v0, v0
  shll.8h v1, v2, #8
  shll.4s v3, v4, #16
  shll.2d v5, v6, #32
  shll2.8h v7, v8, #8
  shll2.4s v9, v10, #16
  shll2.2d v11, v12, #32
  shll v1.8h, v2.8b, #8
  shll v1.4s, v2.4h, #16
  shll v1.2d, v2.2s, #32
  shll2 v1.8h, v2.16b, #8
  shll2 v1.4s, v2.8h, #16
  shll2 v1.2d, v2.4s, #32

; CHECK: cls.8b	v0, v0                  ; encoding: [0x00,0x48,0x20,0x0e]
; CHECK: clz.8b	v0, v0                  ; encoding: [0x00,0x48,0x20,0x2e]
; CHECK: cnt.8b	v0, v0                  ; encoding: [0x00,0x58,0x20,0x0e]
; CHECK: fabs.2s	v0, v0                  ; encoding: [0x00,0xf8,0xa0,0x0e]
; CHECK: fneg.2s	v0, v0                  ; encoding: [0x00,0xf8,0xa0,0x2e]
; CHECK: frecpe.2s	v0, v0          ; encoding: [0x00,0xd8,0xa1,0x0e]
; CHECK: frinta.2s	v0, v0          ; encoding: [0x00,0x88,0x21,0x2e]
; CHECK: frintx.2s	v0, v0          ; encoding: [0x00,0x98,0x21,0x2e]
; CHECK: frinti.2s	v0, v0          ; encoding: [0x00,0x98,0xa1,0x2e]
; CHECK: frintm.2s	v0, v0          ; encoding: [0x00,0x98,0x21,0x0e]
; CHECK: frintn.2s	v0, v0          ; encoding: [0x00,0x88,0x21,0x0e]
; CHECK: frintp.2s	v0, v0          ; encoding: [0x00,0x88,0xa1,0x0e]
; CHECK: frintz.2s	v0, v0          ; encoding: [0x00,0x98,0xa1,0x0e]
; CHECK: frsqrte.2s	v0, v0          ; encoding: [0x00,0xd8,0xa1,0x2e]
; CHECK: fsqrt.2s	v0, v0          ; encoding: [0x00,0xf8,0xa1,0x2e]
; CHECK: neg.8b	v0, v0                  ; encoding: [0x00,0xb8,0x20,0x2e]
; CHECK: mvn.8b	v0, v0                  ; encoding: [0x00,0x58,0x20,0x2e]
; CHECK: rbit.8b	v0, v0                  ; encoding: [0x00,0x58,0x60,0x2e]
; CHECK: rev16.8b	v0, v0          ; encoding: [0x00,0x18,0x20,0x0e]
; CHECK: rev32.8b	v0,


#
# * This program is free software; you can redistribute it and/or modify
# * it under the terms of the GNU General Public License version 2 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.
# *
# * You should have received a copy of the GNU General Public License
# * along with this program; if not, write to the Free Software
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

# Network topology
#
#       n0    n1   n2   n3
#       |     |    |    |
#       =================
#              LAN
#
# - UDP flows from n0 to n1 and back
# - DropTail queues
# - Tracing of queues and packet receptions to file "udp-echo.tr"

import ns.applications
import ns.core
import ns.csma
import ns.internet
import ns.network

def main(argv):
  #
  # Allow the user to override any of the defaults and the above Bind() at
  # run-time, via command-line arguments
  #
  cmd = ns.core.CommandLine()
  cmd.Parse(argv)

  #
  # But since this is a realtime script, don't allow the user to mess with
  # that.
  #
  ns.core.GlobalValue.Bind("SimulatorImplementationType", ns.core.StringValue("ns3::RealtimeSimulatorImpl"))

  #
  # Explicitly create the nodes required by the topology (shown above).
  #
  print "Create nodes."
  n = ns.network.NodeContainer()
  n.Create(4)

  internet = ns.internet.InternetStackHelper()
  internet.Install(n)

  #
  # Explicitly create the channels required by the topology (shown above).
  #
  print ("Create channels.")
  csma = ns.csma.CsmaHelper()
  csma.SetChannelAttribute("DataRate", ns.network.DataRateValue(ns.network.DataRate(5000000)))
  csma.SetChannelAttribute("Delay", ns.core.TimeValue(ns.core.MilliSeconds(2)));
  csma.SetDeviceAttribute("Mtu", ns.core.UintegerValue(1400))
  d = csma.Install(n)

  #
  # We've got the "hardware" in place.  Now we need to add IP addresses.
  #
  print ("Assign IP Addresses.")
  ipv4 = ns.internet.Ipv4AddressHelper()
  ipv4.SetBase(ns.network.Ipv4Address("10.1.1.0"), ns.network.Ipv4Mask("255.255.255.0"))
  i = ipv4.Assign(d)

  print ("Create Applications.")

  #
  # Create a UdpEchoServer application on node one.
  #
  port = 9  # well-known echo port number
  server = ns.applications.UdpEchoServerHelper(port)
  apps = server.Install(n.Get(1))
  apps.Start(ns.core.Seconds(1.0))
  apps.Stop(ns.core.Seconds(10.0))

  #
  # Create a UdpEchoClient application to send UDP datagrams from node zero to
  # node one.
  #
  packetSize = 1024
  maxPacketCount = 500
  interPacketInterval = ns.core.Seconds(0.01)
  client = ns.applications.UdpEchoClientHelper(i.GetAddress (1), port)
  client.SetAttribute("MaxPackets", ns.core.UintegerValue(maxPacketCount))
  client.SetAttribute("Interval", ns.core.TimeValue(interPacketInterval))
  client.SetAttribute("PacketSize", ns.core.UintegerValue(packetSize))
  apps = client.Install(n.Get(0))
  apps.Start(ns.core.Seconds(2.0))
  apps.Stop(ns.core.Seconds(10.0))

  ascii = ns.network.AsciiTraceHelper()
  csma.EnableAsciiAll(ascii.CreateFileStream("realtime-udp-echo.tr"))
  csma.EnablePcapAll("realtime-udp-echo", False)

  #
  # Now, do the actual simulation.
  #
  print ("Run Simulation.")
  ns.core.Simulator.Run()
  ns.core.Simulator.Destroy()
  print ("Done.")

if __name__ == '__main__':
  import sys
  main(sys.argv)


matches = {}

def display_menu():
    print("\nCricket Match Management")
    print("1. View all matches")
    print("2. Add a match")
    print("3. Update a match")
    print("4. Delete a match")
    print("5. Exit")

def view_matches():
    if not matches:
        print("No matches available.")
    else:
        print("\nList of Matches:")
        for date, match in matches.items():
            print(f"{date}: {match}")

def add_match():
    date = input("Enter the match date (YYYY-MM-DD): ")
    if date in matches:
        print(f"Warning: A match already exists on {date}. Details: {matches[date]}")
        return
    match = input("Enter match details (e.g., Team A vs Team B): ")
    matches[date] = match
    print("Match added successfully!")

def update_match():
    view_matches()
    if matches:
        date = input("Enter the date of the match to update (YYYY-MM-DD): ")
        if date in matches:
            new_details = input("Enter updated match details: ")
            matches[date] = new_details
            print("Match updated successfully!")
        else:
            print(f"No match found on {date}.")

def delete_match():
    view_matches()
    if matches:
        date = input("Enter the date of the match to delete (YYYY-MM-DD): ")
        if date in matches:
            removed_match = matches.pop(date)
            print(f"Match on {date} ('{removed_match}') deleted successfully!")
        else:
            print(f"No match found on {date}.")

while True:
    display_menu()
    choice = input("Enter your choice (1-5): ")
    if choice == '1':
        view_matches()
    elif choice == '2':
        add_match()
    elif choice == '3':
        update_match()
    elif choice == '4':
        delete_match()
    elif choice == '5':
        print("Exiting... Thank you!")
        break
    else:
        print("Invalid choice! Please choose between 1-5.")


like this.
  bool containsString(StringInterpolation string) {
    var checkHasString = _IsOrContainsStringVisitor();
    return string.elements.any(
      (child) => child.accept(checkHasString) ?? false,
    );
  }

  /// Strings can be within interpolations (ie, nested). Check like this.
  bool isNestedString(AstNode node) =>
      // careful: node.getAncestor will check the node itself.
      node.parent?.thisOrAncestorOfType<StringInterpolation>() != null;

  @override
  void visitSimpleStringLiteral(SimpleStringLiteral node) {
    if (useSingle && (node.isSingleQuoted || node.value.contains("'")) ||
        !useSingle && (!node.isSingleQuoted || node.value.contains('"'))) {
      return;
    }

    // Bail out on 'strings ${x ? "containing" : "other"} strings'
    if (!isNestedString(node)) {
      rule.reportAtToken(node.literal);
    }
  }

  @override
  void visitStringInterpolation(StringInterpolation node) {
    if (useSingle && node.isSingleQuoted ||
        !useSingle && !node.isSingleQuoted) {
      return;
    }

    // slightly more complicated check there are no single quotes
    if (node.elements.any(
      (e) =>
          e is InterpolationString &&
          (useSingle && e.value.contains("'") ||
              !useSingle && e.value.contains('"')),
    )) {
      return;
    }

    // Bail out on "strings ${x ? 'containing' : 'other'} strings"
    if (!containsString(node) && !isNestedString(node)) {
      rule.reportAtNode(node);
    }
  }
}

/// The only way to get immediate children in a unified, typesafe way, is to
/// call visitChildren on that node, and pass in a visitor. This collects at the
/// top level and stops.
class _ImmediateChildrenVisitor extends UnifyingAstVisitor<void> {
  final _children = <AstNode>[];

  @override
  void visitNode(AstNode node) {
    _children.add(node);
  }

  static List<AstNode> childrenOf(AstNode node) {
    var visitor = _ImmediateChildrenVisitor();
    node.visitChildren(visitor);
    return visitor._children;
  }
}

/// Do a top-down analysis to search for string nodes. Note, do not pass in
/// string nodes directly to this visitor, or you will always get true. Pass in
/// its children.
class _IsOrContainsStringVisitor extends UnifyingAstVisitor<bool> {
  /// Different way to express `accept` in a way that's clearer in this visitor.
  bool isOrContainsString(AstNode node) => node.accept(this) ?? false;

  /// Scan as little of the tree as possible, by bailing out on first match. For
  /// all leaf nodes, they will either have a method defined here and return
  /// true, or they will return false because leaves have no children.
  @override
  bool visitNode(AstNode node) =>
      _ImmediateChildrenVisitor.childrenOf(node).any(isOrContainsString);

  @override
  bool visitSimpleStringLiteral(SimpleStringLiteral string) => true;

  @override
  bool visitStringInterpolation(StringInterpolation string) => true;
}
// Copyright (c) 2019, 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/analysis_rule.dart';
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/d


{
        write!(formatter, "{:?}", &**self)
    }
}

impl<'a> PartialEq<&'a [u8]> for FdbCauset {
    fn eq(&self, rhs: &&[u8]) -> bool {
        **rhs == **self
    }
}
#[doc = r"Register block"]
#[repr(C)]
pub struct RegisterBlock {
    #[doc = "0x00 - Version ID Register"]
    pub verid: VERID,
    #[doc = "0x04 - Parameter Register"]
    pub param: PARAM,
    #[doc = "0x08 - FlexIO Control Register"]
    pub ctrl: CTRL,
    #[doc = "0x0c - Pin State Register"]
    pub pin: PIN,
    #[doc = "0x10 - Shifter Status Register"]
    pub shiftstat: SHIFTSTAT,
    #[doc = "0x14 - Shifter Error Register"]
    pub shifterr: SHIFTERR,
    #[doc = "0x18 - Timer Status Register"]
    pub timstat: TIMSTAT,
    _reserved7: [u8; 4usize],
    #[doc = "0x20 - Shifter Status Interrupt Enable"]
    pub shiftsien: SHIFTSIEN,
    #[doc = "0x24 - Shifter Error Interrupt Enable"]
    pub shifteien: SHIFTEIEN,
    #[doc = "0x28 - Timer Interrupt Enable Register"]
    pub timien: TIMIEN,
    _reserved10: [u8; 4usize],
    #[doc = "0x30 - Shifter Status DMA Enable"]
    pub shiftsden: SHIFTSDEN,
    _reserved11: [u8; 76usize],
    #[doc = "0x80 - Shifter Control N Register"]
    pub shiftctl0: SHIFTCTL0,
    #[doc = "0x84 - Shifter Control N Register"]
    pub shiftctl1: SHIFTCTL1,
    #[doc = "0x88 - Shifter Control N Register"]
    pub shiftctl2: SHIFTCTL2,
    #[doc = "0x8c - Shifter Control N Register"]
    pub shiftctl3: SHIFTCTL3,
    _reserved15: [u8; 112usize],
    #[doc = "0x100 - Shifter Configuration N Register"]
    pub shiftcfg0: SHIFTCFG0,
    #[doc = "0x104 - Shifter Configuration N Register"]
    pub shiftcfg1: SHIFTCFG1,
    #[doc = "0x108 - Shifter Configuration N Register"]
    pub shiftcfg2: SHIFTCFG2,
    #[doc = "0x10c - Shifter Configuration N Register"]
    pub shiftcfg3: SHIFTCFG3,
    _reserved19: [u8; 240usize],
    #[doc = "0x200 - Shifter Buffer N Register"]
    pub shiftbuf0: SHIFTBUF0,
    #[doc = "0x204 - Shifter Buffer N Register"]
    pub shiftbuf1: SHIFTBUF1,
    #[doc = "0x208 - Shifter Buffer N Register"]
    pub shiftbuf2: SHIFTBUF2,
    #[doc = "0x20c - Shifter Buffer N Register"]
    pub shiftbuf3: SHIFTBUF3,
    _reserved23: [u8; 112usize],
    #[doc = "0x280 - Shifter Buffer N Bit Swapped Register"]
    pub shiftbufbis0: SHIFTBUFBIS0,
    #[doc = "0x284 - Shifter Buffer N Bit Swapped Register"]
    pub shiftbufbis1: SHIFTBUFBIS1,
    #[doc = "0x288 - Shifter Buffer N Bit Swapped Register"]
    pub shiftbufbis2: SHIFTBUFBIS2,
    #[doc = "0x28c - Shifter Buffer N Bit Swapped Register"]
    pub shiftbufbis3: SHIFTBUFBIS3,
    _reserved27: [u8; 112usize],
    #[doc = "0x300 - Shifter Buffer N Byte Swapped Register"]
    pub


 Product ID.
 * @param uri The unique identifier you can use to access the product.
 */
@JsonClass(generateAdapter = true)
data class Product(

    @Json(name = "billing_period")
    val billingPeriod: String? = null,

    @Json(name = "description")
    val description: String? = null,

    @Json(name = "metadata")
    val metadata: MetadataInteractions<ProductInteractions>? = null,

    @Json(name = "name")
    val name: String? = null,

    @Json(name = "product_id")
    val productId: String? = null,

    @Json(name = "uri")
    val uri: String? = null

)

/**
 * @see Product.billingPeriod
 * @see BillingPeriodType
 */
val Product.billingPeriodType: BillingPeriodType
    get() = billingPeriod.asEnum(BillingPeriodType.UNKNOWN)
@file:JvmName("SubscriptionInteractionUtils")

package com.vimeo.networking2

import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
import com.vimeo.networking2.annotations.Internal
import com.vimeo.networking2.enums.StreamAccessType
import com.vimeo.networking2.enums.asEnum
import java.util.Date

/**
 * Information on the subscription video action.
 *
 * @param drm Whether the video has DRM.
 * @param expiresTime The time in ISO 8601 format when the subscription expires.
 * @param purchaseTime The time in ISO 8601 format when the subscription was purchased.
 * @param streamAccess The stream type. See [SubscriptionInteraction.streamAccessType].
 */
@Internal
@JsonClass(generateAdapter = true)
data class SubscriptionInteraction(

    @Internal
    @Json(name = "drm")
    val drm: Boolean? = null,

    @Internal
    @Json(name = "expires_time")
    val expiresTime: Date? = null,

    @Internal
    @Json(name = "purchase_time")
    val purchaseTime: Date? = null,

    @Internal
    @Json(name = "stream")
    val streamAccess: String? = null

)

/**
 * @see SubscriptionInteraction.streamAccess
 * @see StreamAccessType
 */
val SubscriptionInteraction.streamAccessType: StreamAccessType
    get() = streamAccess.asEnum(StreamAccessType.UNKNOWN)
@file:JvmName("VimeoAccountUtils")

package com.vimeo.networking2

import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
import java.util.Date

/**
 * This class represents an authenticated user of Vimeo, either logged in or logged out.
 *
 * @param expiresOn The date and time that the token expires.
 * @param refreshToken The refresh token string.
 * @param scope The scope or scopes that the token supports.
 * @param user The authenticated and logged in user.
 * @param tokenType The token type.
 */
@JsonClass(generateAdapter = true)
data class VimeoAccount(

    @Json(name = "access_token")
    override val accessToken: String,

    @Json(name = "expires_on")
    val expiresOn: Date? = null,

    @Json(name = "refresh_token")
    val refreshToken: String? = null,

    @Json(name = "scope")
    val scope: String? = null,

    @Json(name = "user")
    val user: User? = null,

    @Json(name = "token_type")
    val tokenType: String? = null

) : AccessTokenProvider

/**
 * True if the account represents a logged in user, false if it represents a logged out user.
 */
val VimeoAccount.isLoggedIn: Boolean
    get() = user != null
@file:JvmName("PictureCollectionUtils")

package com.vimeo.networking2

import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
import com.vimeo.networking2.common.Entity


40
/* 8006C3EC 0006804C  4E 80 00 20 */	blr

.global func_8006C3F0
func_8006C3F0:
/* 8006C3F0 00068050  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 8006C3F4 00068054  7C 08 02 A6 */	mflr r0
/* 8006C3F8 00068058  38 A0 00 03 */	li r5, 3
/* 8006C3FC 0006805C  90 01 00 24 */	stw r0, 0x24(r1)
/* 8006C400 00068060  38 C1 00 08 */	addi r6, r1, 8
/* 8006C404 00068064  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 8006C408 00068068  7C 9F 23 78 */	mr r31, r4
/* 8006C40C 0006806C  93 C1 00 18 */	stw r30, 0x18(r1)
/* 8006C410 00068070  7C 7E 1B 78 */	mr r30, r3
/* 8006C414 00068074  93 A1 00 14 */	stw r29, 0x14(r1)
/* 8006C418 00068078  48 1E 7A 75 */	bl func_80253E8C
/* 8006C41C 0006807C  80 61 00 08 */	lwz r3, 8(r1)
/* 8006C420 00068080  38 03 FF F8 */	addi r0, r3, -8
/* 8006C424 00068084  28 00 00 3D */	cmplwi r0, 0x3d
/* 8006C428 00068088  41 81 09 E4 */	bgt lbl_8006CE0C
/* 8006C42C 0006808C  3C 60 80 41 */	lis r3, lbl_8040C4A0@ha
/* 8006C430 00068090  54 00 10 3A */	slwi r0, r0, 2
/* 8006C434 00068094  38 63 C4 A0 */	addi r3, r3, lbl_8040C4A0@l
/* 8006C438 00068098  7C 63 00 2E */	lwzx r3, r3, r0
/* 8006C43C 0006809C  7C 69 03 A6 */	mtctr r3
/* 8006C440 000680A0  4E 80 04 20 */	bctr
/* 8006C444 000680A4  3F A0 80 48 */	lis r29, lbl_80478408@ha
/* 8006C448 000680A8  3B BD 84 08 */	addi r29, r29, lbl_80478408@l
/* 8006C44C 000680AC  80 7D 00 04 */	lwz r3, 4(r29)
/* 8006C450 000680B0  4B FE A7 FD */	bl func_80056C4C
/* 8006C454 000680B4  2C 03 00 00 */	cmpwi r3, 0
/* 8006C458 000680B8  41 82 09 B4 */	beq lbl_8006CE0C
/* 8006C45C 000680BC  80 7D 00 04 */	lwz r3, 4(r29)
/* 8006C460 000680C0  38 80 00 A2 */	li r4, 0xa2
/* 8006C464 000680C4  38 A0 00 00 */	li r5, 0
/* 8006C468 000680C8  48 37 15 75 */	bl func_803DD9DC
/* 8006C46C 000680CC  2C 03 00 00 */	cmpwi r3, 0
/* 8006C470 000680D0  41 82 09 9C */	beq lbl_8006CE0C
/* 8006C474 000680D4  80 7D 00 04 */	lwz r3, 4(r29)
/* 8006


domain_log_publishing_option(&mut object_2546, var_2545)?;
        object_2546.finish();
    }
    Ok(())
}

pub fn serialize_structure_crate_model_aws_ec2_vpc_endpoint_service_service_type_details(
    object: &mut aws_smithy_json::serialize::JsonObjectWriter,
    input: &crate::model::AwsEc2VpcEndpointServiceServiceTypeDetails,
) -> Result<(), aws_smithy_http::operation::SerializationError> {
    if let Some(var_2547) = &input.service_type {
        object.key("ServiceType").string(var_2547.as_str());
    }
    Ok(())
}

pub fn serialize_structure_crate_model_aws_waf_rate_based_rule_match_predicate(
    object: &mut aws_smithy_json::serialize::JsonObjectWriter,
    input: &crate::model::AwsWafRateBasedRuleMatchPredicate,
) -> Result<(), aws_smithy_http::operation::SerializationError> {
    if let Some(var_2548) = &input.data_id {
        object.key("DataId").string(var_2548.as_str());
    }
    if input.negated {
        object.key("Negated").boolean(input.negated);
    }
    if let Some(var_2549) = &input.r#type {
        object.key("Type").string(var_2549.as_str());
    }
    Ok(())
}

pub fn serialize_structure_crate_model_aws_waf_regional_rate_based_rule_match_predicate(
    object: &mut aws_smithy_json::serialize::JsonObjectWriter,
    input: &crate::model::AwsWafRegionalRateBasedRuleMatchPredicate,
) -> Result<(), aws_smithy_http::operation::SerializationError> {
    if let Some(var_2550) = &input.data_id {
        object.key("DataId").string(var_2550.as_str());
    }
    if input.negated {
        object.key("Negated").boolean(input.negated);
    }
    if let Some(var_2551) = &input.r#type {
        object.key("Type").string(var_2551.as_str());
    }
    Ok(())
}

pub fn serialize_structure_crate_model_aws_ecr_repository_image_scanning_configuration_details(
    object: &mut aws_smithy_json::serialize::JsonObjectWriter,
    input: &crate::model::AwsEcrRepositoryImageScanningConfigurationDetails,
) -> Result<(), aws_smithy_http::operation::SerializationError> {
    if input.scan_on_push {
        object.key("ScanOnPush").boolean(input.scan_on_push);
    }
    Ok(())
}

pub fn serialize_structure_crate_model_aws_ecr_repository_lifecycle_policy_details(
    object: &mut aws_smithy_json::serialize::JsonObjectWriter,
    input: &crate::model::AwsEcrRepositoryLifecyclePolicyDetails,
) -> Result<(), aws_smithy_http::operation::SerializationError> {
    if let Some(var_2552) = &input.lifecycle_policy_text {
        object.key("LifecyclePolicyText").string(var_2552.as_str());
    }
    if let Some(var_2553) = &input.registry_id {
        object.key("RegistryId").string(var_2553.as_str());
    }
    Ok(())
}

pub fn serialize_structure_crate_model_aws_eks_cluster_resources_vpc_config_details(
    object: &mut aws_smithy_json::serialize::JsonObjectWriter,
    input: &crate::model::AwsEksClusterResourcesVpcConfigDetails,
) -> Result<(), aws_smithy_http::operation::SerializationError> {
    if let Some(var_2554) = &input.security_group_ids {
        let mut array_2555 = object.key("SecurityGroupIds").


id map.get($site-footer, 'separator-color');
  padding-bottom: var(--s-s);
}

.ecl-site-footer__description {
  margin-bottom: var(--s-xs);
  margin-top: var(--s-m);
}

.ecl-site-footer__list {
  list-style: none;
  margin-bottom: 0;
  margin-top: var(--s-s);
  padding-inline-start: 0;
}

.ecl-site-footer__list-item {
  line-height: map.get($theme, 'line-height-ui', 'xs');
  margin-top: var(--s-xs);

  .ecl-link__label {
    vertical-align: middle;
  }

  &:first-of-type {
    margin-top: 0;
  }
}

.ecl-site-footer__logo-link {
  display: inline-block;
  vertical-align: bottom; // Fix to prevent extra vertical spacing

  & + .ecl-site-footer__list {
    margin-top: var(--s-m);
  }
}

.ecl-site-footer__logo-image {
  display: block;
  height: 2.75rem;
}

.ecl-site-footer__section--site-info {
  .ecl-site-footer__list {
    margin-top: var(--s-m);
  }
}

/* stylelint-disable-next-line order/order */
@include breakpoints.up('l') {
  .ecl-site-footer {
    padding-top: 0;
  }

  .ecl-site-footer__container {
    padding: var(--s-4xl) var(--s-m);
  }

  .ecl-site-footer__row {
    column-gap: map.get($site-footer, 'column-gap');
    display: grid;
    grid-gap: 0 map.get($site-footer, 'column-gap');
    grid-template-columns: repeat(3, 1fr);
    padding-bottom: var(--s-3xl);
    padding-top: var(--s-3xl);
  }

  .ecl-site-footer__column {
    padding-top: 0;
  }

  .ecl-site-footer__section {
    padding-top: var(--s-l);
  }

  .ecl-site-footer__title,
  .ecl-site-footer__title:hover,
  .ecl-site-footer__title:focus,
  .ecl-site-footer__title:visited {
    color: map.get($site-footer, 'color');
  }

  .ecl-site-footer__logo-image {
    display: block;
    height: 2.75rem;
  }
}
/*
 * File print
 * @define file
 */

@use 'sass:map';

// Exposed variables
$theme: null !default;
$_image-width: 13.125rem;

.ecl-file {
  margin: 0;
}

.ecl-file__container {
  display: flex;
}

.ecl-file__info {
  border-bottom: 1px solid var(--c-d);
  display: flex;
  flex-direction: column;
  flex-wrap: wrap;
  margin-bottom: map.get($theme, 'spacing-print', 'm');
  padding-bottom: map.get($theme, 'spacing-print', 'm');

  > *:last-child {
    margin-bottom: 0;
    padding-bottom: 0;
  }
}

.ecl-file__icon {
  display: none;
}

.ecl-file__title {
  color: map.get($theme, 'color', 'black');
  font: map.get($theme, 'font-print', 'm');
  font-family: var(--ecl-font-family-print-alt);
  font-weight: map.get($theme, 'font-weight-print', 'bold');
  margin-bottom: map.get($theme, 'spacing-print', 's');
  width: 100%;
}

.ecl-


mber that and pass it
	 * back.
	 */
	b RunProgram

END(cfe_launch)

/*
 * This is a nice place to set a breakpoint.
 */
FUNC(RunProgram)

	LOADREL(r2,=segment_table)
	ldr r2,[r2,#R_SEG_APIENTRY]	/* A2 = code entry */

#if CFG_EMBEDDED_PIC
	ldr r1,mem_textreloc	/* relocate table entry */
	add r2,r2,r1
#endif

	mov r4,r0
	mov r1,#0		/* A1 = 0 */
	mov r0,#0		/* A0 = handle */
	ldr r3,=CFE_EPTSEAL  /* A3 = entrypoint signature */
	pop {r4}		/* entry point */

	/* Check if the MERGE_FRAG function should execute or not,
	 * according to the information within structure cfe_frag_info_t.
	 * _frag_info_sz is the size of structure cfe_frag_info_t.
	 * Structure cfe_frag_info_t is stored right before MERGE_FRAG function, and
	 * MERGE_FRAG function is stored right before entry point.
	 * Note: {r0-r4} must be preserved
	 */
	ldr r7, =_frag_merge_func_len
	ldr r6, [r7]
	ldr r8, =_frag_info_sz
	ldr r7, [r8]
	add r6, r6, r7
	sub r5, r4, r6
	ldr r6, [r5]
	cmp r6, #0
	beq do_run
	mov pc, r6	/* Go to _merge_func */
do_run:
	mov pc, r4		/* go for it. */
END(RunProgram)

	.globl _frag_merge_func
_frag_merge_func:
	.word _merge_func

	.globl _frag_merge_func_len
_frag_merge_func_len:
	.word _merge_func_end - _merge_func

       .globl _frag_info_sz
_frag_info_sz:
	.word   0

/* This merge_func will relocate at address which is stored at MERGE_FRAG.
 * It will reference the value which is stored at MERGE_FRAG.
 * There are the merge_func pointer, des_addr, src_addr and length.
 * r4 is the entry point, r0-r3 are the parameters for the image.
 * r5 is the address of MERGE_FRAG
 */
FUNC(_merge_func)
	ldmia	r5, {r9-r12}
1:
	ldmia	r11!, {r7-r8}			@ copy 8 bytes from the memory at r11 address
	stmia	r10!, {r7-r8}			@ store 8 bytes to the memory at r10 address
						@ r12 is the length, each loop copy 8 bytes
	subs	r12, r12, #8			@ adjust the length
	bgt	1b

	mov	pc, r4				@ jump to the entry point
_merge_func_end:
END(_merge_func)

/*  *********************************************************************
    *  BOARD_SETLEDS(x)
    *
    *  Set LEDs for boot-time progress indication.  Not used if
    *  the board does not have progress LEDs.  This routine
    *  must not call any other routines, since it may be invoked
    *  either from KSEG0 or KSEG1 and it may be invoked
    *  whether or not the icache is operational.
    *
    *  Input parameters:
    *  	   a0 - LED value (8 bits per character, 4 characters)
    *
    *  Return value:
    *  	   nothing
    ********************************************************************* */
FUNC(board_setleds)

	mov	pc, lr			@ back to my caller

END(board_setleds)

/*


      }
      //上传
      parallelToSerial(axiosPromiseArray, Number(parallel > 6 ? 6 : parallel))
        .then((res: any) => {
          onSuccess && onSuccess(res.data, file);
          return res;
        })
        .catch((err: any) => {
          onError && onError(err, file);
        });
    } else {
      // 串行执行
      chunkBufferArray
        .reduce((acu: Promise<any>, curBuffer: any, index: number) => {
          return acu.then((res: any) => {
            const formData = new FormData();

            if (typeof data === "function") {
              // 非分片上传默认data参数是file对象
              const currentData = data(
                file,
                {
                  chunkBuffer: curBuffer.buffer,
                  chunkStart: curBuffer.start,
                  chunkEnd: curBuffer.end,
                  chunkSize: curBuffer.size,
                  chunkCount: chunkBufferArray.length,
                  chunkIndex: index,
                  fileHash: hash,
                },
                res
              );

              Object.keys(currentData).forEach((key) => {
                formData.append(key, currentData[key]);
              });
            } else if (typeof data === "object") {
              Object.keys(data).forEach((key) => {
                formData.append(key, data[key]);
              });
            }

            formData.append(
              filename as string,
              new Blob([curBuffer.buffer], {
                type: "application/octet-stream",
              })
            );

            return Axios.post(action, formData, {
              cancelToken: axiosCancelSource.token,
              withCredentials,
              headers,
              onUploadProgress: ({ loaded, ...resetprops }) => {
                const currentLoaded = chunkBufferArray[index].start + loaded;
                // 统计总上传量
                onProgress &&
                  onProgress(
                    {
                      percent: Math.round((currentLoaded / fileSize) * 100).toFixed(2),
                      total: fileSize,
                      loaded: currentLoaded,
                      chunkIndex: index,
                      ...resetprops,
                    },
                    file
                  );
              },
            });
          });
        }, Promise.resolve(null))
        .then((res: any) => {
          onSuccess && onSuccess(res.data, file);
          return res;
        })
        .catch((err: any) => {
          onError && onError(err, file);
        });
    }
  } else {
    // 构建formData
    const formData = new FormData();

    if (typeof data === "function") {
      const currentData = data(file); // 非分片上传默认data参数是file对象
      Object.keys(currentData).forEach((key) => {
        formData.append(key, currentData[key]);
      });
    } else if (typeof data === "object") {
      Object.keys(data).forEach((key) => {
        formData.append(key, data[key]);
      });
    }
    formData.append(filename as string, file);

    // 正常上传
    Axios.post(action, formData, {
      cancelToken: axiosCancelSource.token,
      withCredentials,
      headers,
      onUploadProgress: ({ total, loaded, ...resetprops }) => {
        onProgress &&
          onProgress(
            {
              percent: Math.round((loaded /


rrors
    for destruction_error in exec.run_singlethreaded(join_all(waiters)) {
        assert!(destruction_error.is_none());
    }
}

async fn create_instances() -> Result<Vec<ScopedInstance>, Error> {
    // Create 3 scoped instances, and confirm that each is funcitoning correctly by using a FIDL
    // service from it
    let mut instances = vec![];
    for _ in 1..=3 {
        let url =
            "fuchsia-pkg://fuchsia.com/fuchsia-component-tests#meta/echo_server.cm".to_string();
        let scoped_instance = ScopedInstance::new("coll".to_string(), url)
            .await
            .context("instance creation failed")?;
        let echo_proxy = scoped_instance
            .connect_to_protocol_at_exposed_dir::<fecho::EchoMarker>()
            .await
            .context("failed to connect to echo in exposed dir")?;
        let out = echo_proxy
            .echo_string(Some("hippos"))
            .await
            .context("echo_string failed")?
            .ok_or(format_err!("empty result"))?;
        assert_eq!(out, "hippos");
        instances.push(scoped_instance);
    }
    Ok(instances)
}
<reponame>daboross/pb-async<filename>src/errors.rs
use http::header::InvalidHeaderValue;
use {bytes, http, hyper, hyper_tls, serde_json};

/// Error that can occur when creating a client.
#[derive(Fail, Debug)]
pub enum StartupError {
    /// Error starting TLS connector
    #[fail(display = "tls error: {}", _0)]
    Tls(hyper_tls::Error),
    /// Token provided was invalid
    #[fail(display = "invalid token: {} (token: {:?})", _0, _1)]
    InvalidToken(InvalidHeaderValue, String),
}

/// Error that can occur when running a request.
#[derive(Fail, Debug)]
pub enum RequestError {
    /// Error creating request.
    #[fail(display = "request error: {}", _0)]
    Http(http::Error),
    /// Hyper error.
    #[fail(display = "hyper error: {}", _0)]
    Hyper(hyper::Error),
    /// Generic server error.
    #[fail(display = "server error: {}: {:?}", status, bytes)]
    Status {
        /// The failed server status.
        status: http::StatusCode,
        /// The response included with this status.
        bytes: bytes::Bytes,
    },
    /// Invalid JSON in response.
    #[fail(display = "invalid response json: {}. data: {:?}", error, bytes)]
    Json {
        /// Inner error
        error: serde_json::Error,
        /// Bytes which could not be decoded
        bytes: bytes::Bytes,
    },
    /// Server error.
    #[fail(display = "server error: {}: {}", code, message)]
    Server {
        /// Error code string
        code: String,
        /// Human readable error message
        message: String,
    },
}

impl From<hyper::Error> for RequestError {
    fn from(e: hyper::Error) -> Self {
        RequestError::Hyper(e)
    }
}

impl From<http::Error> for RequestError {
    fn from(e: http::Error) -> Self {
        RequestError::Http(e)
    }
}
mod day_01;
mod day_02;
mod day_03;
mod day_04;
mod day_05;
mod day_06;
mod day_07;
mod day_08;
mod day_09;
mod day_10;
mod day_11;
mod day_12;
mod day_13;
mod day_14;
mod day_15;
mod day


户程序。**

即使在内核中，我们有时也需要执行一些在用户级才提供的操作：如打开某个文件以读取特定数据，执行某个用户程序从而完成某个功能。因为许多数据和功能在用户空间是现有的或者已经被实现了，那么没有必要耗费大量的资源去重复。此外，内核在设计时，为了拥有更好的弹性或者性能以支持未知但有可能发生的变化，本身就要求使用用户空间的资源来配合完成任务。比如内核中动态加载模块的部分需要调用kmod。但在编译kmod的时候不可能把所有的内核模块都订下来（要是这样的话动态加载模块就没有存在意义了），所以它不可能知道在它以后才出现的那些模块的位置和加载方法。因此，模块的动态加载就采用了如下策略：加载任务实际上由位于用户空间的modprobe程序帮助完成——最简单的情形是modprobe用内核传过来的模块名字作为参数调用insmod。用这种方法来加载所需要的模块。

内核中启动用户程序还是要通过execve这个系统调用原形，只是此时的调用发生在内核空间，而一般的系统调用则在用户空间进行。如果系统调用带参数，那将会碰到一个问题：因为在系统调用的具体实现代码中要检查参数合法性，该检查要求所有的参数必须位于用户空间——地址处于0x0000000——0xC0000000之间，所以如果我们从内核传递参数（地址大于0xC0000000）,那么检查就会拒绝我们的调用请求。为了解决这个问题，我们可以利用set_fs宏来修改检查策略，使得允许参数地址为内核地址。这样内核就可以直接使用该系统调用了。

例如：在kmod通过调用execve来执行modprobe的代码前需要有set_fs(KERNEL_DS):

......
set_fs(KERNEL_DS);

/* Go, go, go... */
if (execve(program_path, argv, envp) < 0)
return -errno;
上述代码中program_path 为"/sbin/modprobe"，argv为{ modprobe_path, "-s", "-k", "--", (char*)module_name, NULL }，envp为{ "HOME=/", "TERM=linux", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL }。

从内核中打开文件同样使用带参数的open系统调用，所需的仍是要先调用set_fs宏。

#### **B** **利用**brk**系统调用来导出内核数据**

内核和用户空间传递数据主要是用get_user(ptr)和put_user(datum,p


tionInSeconds}">`;
    xml += testCases.join("");
    xml += `</testsuite>`;

    return xml;
  }

  /**
   * Create CI output for results
   * Details on failures only
   */
  public async toCI(): Promise<string> {
    const scenarios: iScenario[] = this.suite.scenarios;

    const ciOutput: string[] = [];

    for (let i = 0; i < scenarios.length; i++) {
      const scenario: iScenario = scenarios[i];
      const log = await scenario.getLog();

      // .next("I am a subscenario title", async context => { })
      let subScenarioTitle: string;

      log.forEach((item: iLogItem) => {
        if (item.className === "heading") {
          subScenarioTitle = item.message;
        }

        if (item.type.startsWith("result")) {
          const message = item.message;

          if (item.type === "resultFailure") {
            ciOutput.push("---FAILURE---");
            ciOutput.push(`Suite: ${this.suite.title}`);
            ciOutput.push(`Scenario: ${scenario.title} - ${subScenarioTitle}`);
            ciOutput.push(`Assertion: ${message}`);
            if (item["detailsMessage"] && item["detailsMessage"].length) {
              ciOutput.push(
                item["detailsMessage"].join(" - ").replace(/\s+/g, " ").trim()
              );
            }
          }
        }
      });
    }
    return ciOutput.join("\n");
  }

  public async toDelimited(format: string): Promise<string[]> {
    const funcName: string = `to${format.charAt(0).toUpperCase()}${format.slice(
      1
    )}`;
    if (!Reflect.has(new LogComment(""), funcName)) {
      throw new Error(`Method for ${funcName} does not exist.`);
    }
    const lines: string[] = [];
    await this.suite.scenarios.forEach(async function (scenario) {
      const log = await scenario.getLog();
      log.forEach((item: iLogItem) => {
        lines.push(item[funcName]());
      });
    });
    return lines;
  }

  public async print(): Promise<any> {
    return new Promise(async (resolve, reject) => {
      try {
        const output = await this.toString();

        const lines = output.split("\n");

        lines.forEach((line) => {
          // node child process has a 8192 character limit
          const chunks = line.match(/.{1,8192}/g) || [];
          chunks.forEach((chunk) => {
            // send the chunks
            process.send ? process.send(chunk) : console.log(chunk);
          });
        });
        // wait for the chunks to send before resolving and exiting the process
        setTimeout(() => {
          resolve();
        }, 0);
      } catch (error) {
        reject(error);
      }
    });
  }

  public async toString(): Promise<string> {
    let out = "";

    switch (true) {
      // HTML
      case FlagpoleExecution.global.shouldWriteHtml:
        return this.toHTML();
      // JSON
      case FlagpoleExecution.global.isJsonOutput:
        const json: any = await this.toJson();
        return JSON.stringify(json, null, 2);
      // CSV
      case FlagpoleExecution.global.isDelimitedOutput:
        const format = FlagpoleExecution.global.outputFormat;
        (await this.toDelimited(format)).forEach((line: string) => {
          out += line + "\n";
        });
        return out;
      // XML
      case FlagpoleExecution.global.isXmlOutput:
        return this.toXML();
      // Text
      case FlagpoleExecution.global.isTextOutput:
        (await this.toConsole()).forEach((line: iConsoleLine) => {


rovider.evalUserAnswer(question, item, 8);
            break;
          }
          case "very":{
            this.tagProvider.evalUserAnswer(question, item, 6);
            break;
          }
        }
      }
      // What Is The Value Of Your Relevant Assets?
      case "Assets": {
        switch(item) {
          case "9k": {
            this.tagProvider.evalUserAnswer(question, item, 6);
            break;
          }
          case "10k":{
            this.tagProvider.evalUserAnswer(question, item, 6);
            break;
          }
          case "20k":{
            this.tagProvider.evalUserAnswer(question, item, 6);
            break;
          }
          case "30k":{
            this.tagProvider.evalUserAnswer(question, item, 8);
            break;
          }
          case "40k":{
            this.tagProvider.evalUserAnswer(question, item, 8);
            break;
          }
          case "50k":{
            this.tagProvider.evalUserAnswer(question, item, 8);
            break;
          }
          case "60k":{
            this.tagProvider.evalUserAnswer(question, item, 8);
            break;
          }
          case "70k":{
            this.tagProvider.evalUserAnswer(question, item, 10);
            break;
          }
          case "80k":{
            this.tagProvider.evalUserAnswer(question, item, 10);
            break;
          }
          case "90k":{
            this.tagProvider.evalUserAnswer(question, item, 10);
            break;
          }
        }
      }
      // What Is Your Net Worth?
      case "Networth": {
        switch(item) {
          case "9k": {
            this.tagProvider.evalUserAnswer(question, item, 6);
            break;
          }
          case "10k":{
            this.tagProvider.evalUserAnswer(question, item, 6);
            break;
          }
          case "20k":{
            this.tagProvider.evalUserAnswer(question, item, 6);
            break;
          }
          case "30k":{
            this.tagProvider.evalUserAnswer(question, item, 8);
            break;
          }
          case "40k":{
            this.tagProvider.evalUserAnswer(question, item, 8);
            break;
          }
          case "50k":{
            this.tagProvider.evalUserAnswer(question, item, 8);
            break;
          }
          case "60k":{
            this.tagProvider.evalUserAnswer(question, item, 8);
            break;
          }
          case "70k":{
            this.tagProvider.evalUserAnswer(question, item, 10);
            break;
          }
          case "80k":{
            this.tagProvider.evalUserAnswer(question, item, 10);
            break;
          }
          case "90k":{
            this.tagProvider.evalUserAnswer(question, item, 10);
            break;
          }
        }
      }

    }
  }

  // Called when the submit button is pressed
  submit(){
    // Navigate back to the sign-up page
    this.navCtrl.pop();
    console.log("Previous Page");
  }
}
import { Request, Response, NextFunction } from 'express';
import { getRepository } from 'typeorm';
import Rating from '../../entities/rating';
import User from '../../entities/user';
import { UnauthorizedError, InvalidParamError, NotFoundError } from '../../libs/customErrors';

interface RemoveBookRatingRequest extends Request {
  body: {
    ratingId: number;
  };
}

const removeRating = async (
  req: RemoveBookRatingRequest,
  res: Response,
  next: NextFunction,
): Promise<void> => {
  try {
    if (!req.user) {
      throw new UnauthorizedError('인증 정보가 없습니다.');
    }

    const { id: userId } = req.user as User;
    const {
      body: { ratingId },
    } = req;

    if (!ratingId)


vpns/hot-site">翻墙后必须要访问的网站之一。

YouTube不仅是一个视频平台，更是一个创作者经济的中心。通过其合作伙伴计划，很多内容创作者可以从视频中获得广告收入，甚至把制作YouTube视频变成一份全职工作。平台上涌现出大量的"YouTuber"（油管博主），有些人的订阅者数量甚至超过了传统媒体的观众群。这种模式也促使了更多高质量的原创内容不断产生。此外，YouTube的推荐算法也非常智能，会根据用户的观看历史推荐相关视频，让人不知不觉就能刷上好几个小时。

对于中国用户来说，YouTube虽然被墙，但其界面支持简体中文和繁体中文，使用起来毫无障碍。有意思的是，YouTube上有非常多的中文内容，来自港澳台地区以及海外华人创作者的视频应有尽有，还有不少翻墙出海的大陆博主。许多人专门翻墙就是为了看YouTube上的这些内容。YouTube的大部分视频都是免费的，只需观看少量广告即可。当然，如果想要去掉广告，也可以订阅YouTube Premium服务，同时还能获得YouTube Music和后台播放等额外功能。此外，如果你想从Youtube平台上下载喜欢的视频，可以查看：Youtube视频下载。

* 网址：https://www.youtube.com/

### 2. Twitch - 全球最知名的游戏直播平台

![海外免费视频网站推荐二：Twitch - 全球最知名的游戏直播平台](https://raw.githubusercontent.com/chinavpns/video-site/refs/heads/main/image/%E6%B5%B7%E5%A4%96%E8%A7%86%E9%A2%91%E7%BD%91%E7%AB%99%E6%8E%A8%E8%8D%90-7.png)

Twitch绝对是游戏玩家的网上"圣地"，这家2011年成立的视频直播平台已经成为了全球游戏直播的头号选手。2014年，这家公司被电商巨头亚马逊以近10亿美元收购，从此更是一路高歌猛进。Twitch的主打内容是游戏直播，平台上聚集了数以万计的游戏主播，每天24小时不间断地直播各种�


(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Policy.ProtoReflect.Descriptor instead.
func (*Policy) Descriptor() ([]byte, []int) {
	return file_wso2_discovery_api_Resource_proto_rawDescGZIP(), []int{3}
}

func (x *Policy) GetAction() string {
	if x != nil {
		return x.Action
	}
	return ""
}

func (x *Policy) GetParameters() map[string]string {
	if x != nil {
		return x.Parameters
	}
	return nil
}

var File_wso2_discovery_api_Resource_proto protoreflect.FileDescriptor

var file_wso2_discovery_api_Resource_proto_rawDesc = []byte{
	0x0a, 0x21, 0x77, 0x73, 0x6f, 0x32, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79,
	0x2f, 0x61, 0x70, 0x69, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x12, 0x12, 0x77, 0x73, 0x6f, 0x32, 0x2e, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76,
	0x65, 0x72, 0x79, 0x2e, 0x61, 0x70, 0x69, 0x1a, 0x29, 0x77, 0x73, 0x6f, 0x32, 0x2f, 0x64, 0x69,
	0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x65, 0x6e, 0x64, 0x70,
	0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f,
	0x74, 0x6f, 0x1a, 0x2b, 0x77, 0x73, 0x6f, 0x32, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65,
	0x72, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x69, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65,
	0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a,
	0x26, 0x77, 0x73, 0x6f, 0x32, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2f,
	0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x6e, 0x66,
	0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x33, 0x77, 0x73, 0x6f, 0x32, 0x2f, 0x64, 0x69,
	0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x69, 0x5f, 0x6d,
	0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x64, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64,
	0x5f, 0x72, 0x6f, 0x62, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0


   The resistance (in ohms) of the pullup attached to the analog
#   button. The default is 4700 ohms.
#analog_range_click_pin:
#   The resistance range for a 'enter' button. Range minimum and
#   maximum comma-separated values must be provided when using analog
#   button.
#analog_range_back_pin:
#   The resistance range for a 'back' button. Range minimum and
#   maximum comma-separated values must be provided when using analog
#   button.
#analog_range_up_pin:
#   The resistance range for a 'up' button. Range minimum and maximum
#   comma-separated values must be provided when using analog button.
#analog_range_down_pin:
#   The resistance range for a 'down' button. Range minimum and
#   maximum comma-separated values must be provided when using analog
#   button.
#analog_range_kill_pin:
#   The resistance range for a 'kill' button. Range minimum and
#   maximum comma-separated values must be provided when using analog
#   button.
```

#### hd44780顯示屏

有關配置 hd44780 顯示屏（在"RepRapDiscount 2004 Smart Controller"型別顯示屏中可以找到）的資訊。

```
[display]
lcd_type: hd44780
#   對於hd44780顯示屏，填寫 "hd44780"。
rs_pin:
e_pin:
d4_pin:
d5_pin:
d6_pin:
d7_pin:
#   連線到hd44780 類LCD的引腳。
#   必須提供這些參數
#hd44780_protocol_init: True
#   在一個 hd44780 顯示屏上執行 8-bit/4-bit 協議初始化。對於所有
#   正版的 hd44780 裝置，這是必須的。但是，在一些克隆的裝置上
#   可能需要禁用。
#   預設為True（啟用）。
#line_length:
#   設定 hd44780 類LCD 每行顯示的字元數。可能的數值有20（預設）
#   和16。行數被鎖定為4行。
...
```

#### hd44780_spi顯示屏

有關配置 hd44780_spi 顯示屏的資訊 - 通過硬體"移位暫存器"（用於基於 mightyboard 的印表機）控制的20x04顯示屏。

```
[display]
lcd_type: hd44780_spi
#   對於hd44780_spi 顯示屏，設定為「hd44780_spi」。
latch_pin:
spi_software_sclk_pin:
spi_software_mosi_pin:
spi_software_miso_pin:
#   控制顯示屏的移位暫存器的引腳。由於位移暫存器沒有 MISO 引
#   腳，但是軟體 SPI 實現需要這個引腳被配置，
#   spi_software_miso_pin 需要被設定為一個印表機主板上未被使
#   用的引腳。
#hd44780_protocol_init: True
#   在 hd44780 顯示屏上執行 8-bit/4-bit 協議初始化。正版的
#   hd44780 裝置必須執行此操作，但是某些克隆裝置上可能需要
#   禁用。
#   預設為True（啟用）。
#line_length:
#   設定一個 hd44780 類 LCD 每行顯示的字元數量。可能的值為20
#   （預設）和 16。行數固定為4。
...
```

#### aip31068_spi display

Information on configuring an aip31068_spi display - a very similar to hd44780_spi a 20x04 (20 symbols by 4 lines) display with slightly different internal protocol.

```
[display]
lcd_type: aip31068_spi
latch_pin:
spi_software_sclk_pin:
spi_software_mosi_pin:
spi_software_miso_pin:
#   The pins connected to the shift register controlling the display.
#   The spi_software_miso_pin needs to be set to an unused pin of the
#   printer mainboard as the shift register does not have a MISO pin,
#   but the software spi implementation requires this pin to be
#   configured.
#line_length:
#   Set


'Í', 0},
    {IV('ị'), 'ị', 0}, {IV('Ị'), 'Ị', 0},
    {IV('o'), 'o', 0}, {IV('O'), 'O', 0},
    {IV('ò'), 'o', 0}, {IV('Ò'), 'O', 0},
    {IV('ỏ'), 'o', 0}, {IV('Ỏ'), 'O', 0},
    {IV('õ'), 'o', 0}, {IV('Õ'), 'O', 0},
    {IV('ó'), 'o', 0}, {IV('Ó'), 'O', 0},
    {IV('ọ'), 'o', 0}, {IV('Ọ'), 'O', 0},
    {IV('ô'), 'o', 0}, {IV('Ô'), 'O', 0},
    {IV('ồ'), 'o', 0}, {IV('Ồ'), 'O', 0},
    {IV('ổ'), 'o', 0}, {IV('Ổ'), 'O', 0},
    {IV('ỗ'), 'o', 0}, {IV('Ỗ'), 'O', 0},
    {IV('ố'), 'o', 0}, {IV('Ố'), 'O', 0},
    {IV('ộ'), 'o', 0}, {IV('Ộ'), 'O', 0},
    {IV('ơ'), 'o', 0}, {IV('Ơ'), 'O', 0},
    {IV('ờ'), 'o', 0}, {IV('Ờ'), 'O', 0},
    {IV('ở'), 'o', 0}, {IV('Ở'), 'O', 0},
    {IV('ỡ'), 'o', 0}, {IV('Ỡ'), 'O', 0},
    {IV('ớ'), 'o', 0}, {IV('Ớ'), 'O', 0},
    {IV('ợ'), 'o', 0}, {IV('Ợ'), 'O', 0},
    {IV('ù'), 'u', 0}, {IV('Ù'), 'U', 0},
    {IV('ủ'), 'u', 0}, {IV('Ủ'), 'U', 0},
    {IV('ũ'), 'u', 0}, {IV('Ũ'), 'U', 0},
    //{IV('ú'), 'u', 0}, {IV('Ú'), 'U', 0},
    {IV('ụ'), 'u', 0}, {IV('Ụ'), 'U', 0},
    {IV('ư'), 'u', 0}, {IV('Ư'), 'U', 0},
    {IV('ừ'), 'u', 0}, {IV('Ừ'), 'U', 0},
    {IV('ử'), 'u', 0}, {IV('Ử'), 'U', 0},
    {IV('ữ'), 'u', 0}, {IV('Ữ'), 'U', 0},
    {IV('ứ'), 'u', 0}, {IV('Ứ'), 'U', 0},
    {IV('ự'), 'u', 0}, {IV('Ự'), 'U', 0},
    {IV('y'), 'y', 0}, {IV('Y'), 'Y', 0},

  #endif

  #if ENABLED(DISPLAY_CHARSET_ISO10646_GREEK)

    {IV('΄'), '\'', 0}, // 0384
    {IV('΅'), '\'', 0}, // 0385
    {IV('Ά'), 'A', 0}, // 0386
    {IV('·'), '.', 0}, // 0387
    {IV('Έ'), 'E', 0}, // 0388
    {IV('Ή'), 'H', 0}, // 0389
    {IV('Ί'), 'I', 0}, // 038A
    {IV('Ό'), 'O', 0}, // 038C
    {IV('Ύ'), 'Y', 0}, // 038E
    {IV('Ώ'), 'O', 0}, // 038F
    {IV('ΐ'), 'i', 0}, // 0390
    {IV('Α'), 'A', 0}, // 0391
    {IV('Β'), 'B', 0}, // 0392
    {IV('Γ'), 'T', 0}, // 0393, Gamma
    {IV('Δ'), '4', 0}, // 0394, Delta, ◿
    {IV('Ε'), 'E', 0}, // 0395
    {IV('Ζ'), 'Z', 0}, // 0396
    {IV('Η'), 'H', 0}, // 0397
    {IV('Θ'), '0', 0}, // 0398, Theta
    {IV('Ι'), 'I', 0}, // 0399
    {IV('Κ'), 'K', 0}, // 039A
    {IV('Λ'), '^', 0}, // 039B, Lambda
    {IV('Μ'), 'M', 0}, // 039C
    {IV('Ν'), 'N', 0}, // 039D
    {IV('Ξ'), '3', 0}, // 039E, Xi
    {IV('Ο'), 'O', 0}, // 039F
    {IV('Π'), 'n', 0}, // 03A0, Pi
    {IV('Ρ'), 'P', 0}, // 03A1
    {IV('Σ'), 'E', 0}, // 03A3, Sigma
    {IV('Τ'), 'T', 0}, // 03A4
    {IV('Υ'), 'Y', 0}, // 03A5, Upsilon
    {IV('Φ'), 'p', 0}, // 03A6, Phi
    {IV('Χ'), 'X', 0}, // 03A7
    {IV('Ψ'), 'P', 0}, // 03A8, Psi
    {IV('Ω'), 'O', 0}, // 03A9, Omega
    {IV('Ϊ'), 'I', 0}, // 03AA
    {IV('Ϋ'), 'Y', 0}, // 03AB
    {IV('ά'), 'a', 0}, // 03AC
    {IV('έ'), 'e', 0}, // 03AD
    {IV('ή'), 'n', 0}, // 03AE
    {IV('ί'), 'i', 0}, // 03AF
    {IV('ΰ'), 'v', 0}, // 03B0
    {IV('α'), 'a', 0}, // 03B1, alpha
    {IV('β'), 'B', 0}, // 03B2, beta
    {IV('γ'), 'v', 0}, // 03B3, gamma
    {IV('δ'), 'd', 0}, // 03B4, delta
    {IV('ε'), 'e', 0}, // 03B5, epsilon
    {IV('ζ'), 'Z', 0}, // 03B6, zeta
    {IV('η'), 'n', 0}, // 03B7, eta
    {IV('θ'), '0', 0}, // 03B8, theta
    {IV('ι'), 'i', 0}, // 03B9, lota
    {IV('κ'), 'k', 0}, // 03BA, kappa
    {IV('λ'), 'L', 0}, // 03BB, lambda
    {IV('μ'), 'u', 0}, // 03BC, mu
    {IV('ν'), 'v', 0}, // 03BD, nu
    {IV('ξ'), 'e', 0}, // 03BE, xi
    {IV('ο'), 'o', 0}, // 03BF
    {IV('π'), 'n', 0}, // 03C0, pi
    {IV('ρ'), 'p', 0}, // 03C1, rho
    {IV('ς'), 'c', 0}, // 03C2
    {IV('σ'), 'o', 0}, // 03C3, sigma
    {IV('τ'), 't', 0}, // 03C4, tau
    {IV('υ'), 'v', 0}, // 03C5, upsilon
    {IV('φ'), 'p', 0}, // 03C6
    {IV('χ'), 'X', 0}, // 03C7, chi
    {IV('ψ'), 'W', 0}, // 03C8, psi
    {IV('ω'), 'w', 0}, // 03C9, omega
    {IV('ϊ'), 'i', 0}, // 03CA
    {IV('ϋ'), 'v', 0}, // 03CB
    {IV('ό'), 'o', 0}, // 03CC
    {IV('ύ'), 'v', 0}, // 03CD
    {IV('ώ'), 'w', 0}, // 03CE

  #endif

  #if ENABLED(DISPLAY_CHARSET_ISO10646_5)
    // Map CYRILLIC code to plain ASCII
    {IV('Ё'), 'E', 0}, // 0401
    {IV('А'), 'A', 0}, // 0410
    {IV('Б'), 'b', 0}, // 0411
    {IV('В'), 'B', 0}, // 0412
    {IV('Г'), 'T', 0}, // 0413
    {IV('Д'), 'Q', 0}, // 0414
    {IV('Е'), 'E', 0}, // 0415
    {IV('Ж'), '*', 0}, // 0416
    {IV('З'), 'E', 0}, // 0417
    {IV('И'), 'N', 0}, // 0418
    {IV('Й'), 'N', 0}, // 0419
    {IV('К'), 'K', 0}, // 041A
    {IV('Л'), 'T', 0}, // 041B
    {IV('М'), 'M', 0}, // 041C
    {IV('Н'), 'H', 0}, // 041D
    {IV('О'), 'O', 0}, // 041E
    {IV('П'), 'n', 0}, // 041F
    {IV('Р'), 'P', 0}, // 0420
    {IV('С'), 'C', 0}, // 0421
    {I


-controls-container {
  padding: 16px 12px;
  flex: 1;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 8px;
  min-width: 200px;
  height: 100%;
  font-family: 'Segoe UI', -apple-system, BlinkMacSystemFont, sans-serif;
}

/* Filtration Status Row Layout - Clean and Centered */
.filtration-controls-container .filtration-status-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 12px 14px;
  background: linear-gradient(135deg, #373737 0%, #404040 100%);
  border-radius: 6px;
  border: 1px solid #4a4a4a;
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.05),
              0 2px 4px rgba(0,0,0,0.15);
  transition: all 0.2s ease;
  min-height: 44px;
  width: 100%;
}

.filtration-controls-container .filtration-status-row:hover {
  border-color: #5a5a5a;
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.08),
              0 3px 6px rgba(0,0,0,0.2);
}

/* Filtration Labels */
.filtration-controls-container .filtration-label {
  font-size: 13px;
  font-weight: 600;
  color: #e6e6e6;
  letter-spacing: 0.3px;
  text-transform: uppercase;
  min-width: 80px;
  flex-shrink: 0;
}

/* Filtration Values - Clean Text Only */
.filtration-controls-container .filtration-value {
  font-size: 15px;
  font-weight: 600;
  color: #ffffff;
  font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Segoe UI', sans-serif;
  letter-spacing: 0.2px;
  text-align: center;
  flex-grow: 1;
  margin-left: 12px;
  transition: color 0.2s ease;
}

/* Clean Hover Effect */
.filtration-controls-container .filtration-value:hover {
  color: #4a90e2;
}

/* TVOC Level Color Indicators - Simple Colors */
.filtration-controls-container #tvoc-level-display.tvoc-low {
  color: #00e676;
}

.filtration-controls-container #tvoc-level-display.tvoc-medium {
  color: #ff9500;
}

.filtration-controls-container #tvoc-level-display.tvoc-high {
  color: #e74c3c;
}

/* Filtration Button Container */
.filtration-controls-container .filtration-controls-buttons {
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin-top: 4px;
  width: 100%;
  align-items: stretch;
}

/* Modern Filtration Button Design */
.filtration-controls-container .filtration-control-btn {
  background: linear-gradient(135deg, #4a90e2 0%, #357abd 100%);
  color: #ffffff;
  border: none;
  padding: 8px 14px;
  border-radius: 5px;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  text-transform: uppercase;
  letter-spacing: 0.5px;
  transition: all 0.15s ease;
  box-shadow: 0 2px 4px rgba(74, 144, 226, 0.25),
              inset 0 1px 0 rgba(255,255,255,0.2);
  border: 1px solid rgba(255,255,255,0.1);
  min-width: 40px;
  display: flex;
  align-items: center;
  justify-content:


SessionDescription, offerId uint32) {
	logger.Infow("handling server offer", "participant", c.localParticipant.Identity)
	c.subscriber.HandleRemoteDescription(desc, offerId)
	c.processPendingRemoteTracks()
}

// the client handles answer on the publisher PC
func (c *RTCClient) handleAnswer(desc webrtc.SessionDescription, answerId uint32) {
	logger.Infow("handling server answer", "participant", c.localParticipant.Identity)

	// remote answered the offer, establish connection
	c.publisher.HandleRemoteDescription(desc, answerId)
	c.processPendingRemoteTracks()
}

// the client handles media sections requirement on the publisher PC
func (c *RTCClient) handleMediaSectionsRequirement(mediaSectionsRequirement *livekit.MediaSectionsRequirement) {
	addTransceivers := func(kind webrtc.RTPCodecType, count uint32) {
		for i := uint32(0); i < count; i++ {
			if _, err := c.publisher.AddTransceiverFromKind(
				kind,
				webrtc.RTPTransceiverInit{
					Direction: webrtc.RTPTransceiverDirectionRecvonly,
				},
			); err != nil {
				logger.Warnw(
					"could not add transceiver", err,
					"participant", c.localParticipant.Identity,
					"kind", kind,
				)
			} else {
				logger.Infow(
					"added transceiver of kind",
					"participant", c.localParticipant.Identity,
					"kind", kind,
				)
			}
		}
	}

	addTransceivers(webrtc.RTPCodecTypeAudio, mediaSectionsRequirement.NumAudios)
	addTransceivers(webrtc.RTPCodecTypeVideo, mediaSectionsRequirement.NumVideos)
	c.publisher.Negotiate(false)
}

func (c *RTCClient) onOffer(offer webrtc.SessionDescription, offerId uint32) error {
	if c.localParticipant != nil {
		logger.Infow("starting negotiation", "participant", c.localParticipant.Identity)
		logger.Infow(
			"sending publisher offer",
			"participant", c.localParticipant.Identity,
			"offer", offer,
		)
	}
	return c.SendRequest(&livekit.SignalRequest{
		Message: &livekit.SignalRequest_Offer{
			Offer: signalling.ToProtoSessionDescription(offer, offerId),
		},
	})
}

func (c *RTCClient) processPendingRemoteTracks() {
	c.lock.Lock()
	pendingRemoteTracks := c.pendingRemoteTracks
	c.pendingRemoteTracks = nil
	c.lock.Unlock()

	for _, pendingRemoteTrack := range pendingRemoteTracks {
		go c.processRemoteTrack(pendingRemoteTrack)
	}
}

func (c *RTCClient) processRemoteTrack(track *webrtc.TrackRemote) {
	lastUpdate := time.Time{}

	// because of FireOnTrackBySdp, it is possible get an empty streamID
	// if media comes before SDP, cache and try later
	streamID := track.StreamID()
	if streamID == "" {
		logger.Infow(
			"client caching track",
			"participant", c.localParticipant.Identity,
			"pID", c.ID(),
			"codec", track.Codec(),
			"ssrc", track.SSRC(),
		)
		c.lock.Lock()
		c.pendingRemoteTracks = append(c.pendingRemoteTracks, track)
		c.lock.Unlock()
		return
	}

	publisherID, trackID := rtc.UnpackStreamID(streamID)
	if trackID == "" {
		trackID = livekit.TrackID


IsColumn = false
   typeInfo
      type = Guid
      IsInnate = true
```

## Remarks

PKEY values are defined in Propkey.h.

## Related topics

[propertyDescription](./propdesc-schema-propertydescription.md)

[searchInfo](./propdesc-schema-searchinfo.md)

[labelInfo](./propdesc-schema-labelinfo.md)

[typeInfo](./propdesc-schema-typeinfo.md)

[displayInfo](./propdesc-schema-displayinfo.md)

[stringFormat](./propdesc-schema-stringformat.md)

[booleanFormat](./propdesc-schema-booleanformat.md)

[numberFormat](./propdesc-schema-numberformat.md)

[dateTimeFormat](./propdesc-schema-datetimeformat.md)

[enumeratedList](./propdesc-schema-enumeratedlist.md)

[drawControl](./propdesc-schema-drawcontrol.md)

[editControl](./propdesc-schema-editcontrol.md)

[filterControl](./propdesc-schema-filtercontrol.md)

[queryControl](./propdesc-schema-querycontrol.md)

---
UID: NF:wdfdriver.WDF_DRIVER_VERSION_AVAILABLE_PARAMS_INIT
title: WDF_DRIVER_VERSION_AVAILABLE_PARAMS_INIT function (wdfdriver.h)
description: The WDF_DRIVER_VERSION_AVAILABLE_PARAMS_INIT function initializes a WDF_DRIVER_VERSION_AVAILABLE_PARAMS structure.
old-location: wdf\wdf_driver_version_available_params_init.htm
tech.root: wdf
ms.date: 02/26/2018
keywords: ["WDF_DRIVER_VERSION_AVAILABLE_PARAMS_INIT function"]
ms.keywords: DFDriverObjectRef_9638f416-7d77-45af-8e87-07c51198fb05.xml, WDF_DRIVER_VERSION_AVAILABLE_PARAMS_INIT, WDF_DRIVER_VERSION_AVAILABLE_PARAMS_INIT function, kmdf.wdf_driver_version_available_params_init, wdf.wdf_driver_version_available_params_init, wdfdriver/WDF_DRIVER_VERSION_AVAILABLE_PARAMS_INIT
req.header: wdfdriver.h
req.include-header: Wdf.h
req.target-type: Universal
req.target-min-winverclnt:
req.target-min-winversvr:
req.kmdf-ver: 1.0
req.umdf-ver: 2.0
req.ddi-compliance:
req.unicode-ansi:
req.idl:
req.max-support:
req.namespace:
req.assembly:
req.type-library:
req.lib:
req.dll:
req.irql:
targetos: Windows
req.typenames:
f1_keywords:
 - WDF_DRIVER_VERSION_AVAILABLE_PARAMS_INIT
 - wdfdriver/WDF_DRIVER_VERSION_AVAILABLE_PARAMS_INIT
topic_type:
 - APIRef
 - kbSyntax
api_type:
 - HeaderDef
api_location:
 - wdfdriver.h
api_name:
 - WDF_DRIVER_VERSION_AVAILABLE_PARAMS_INIT
---

# WDF_DRIVER_VERSION_AVAILABLE_PARAMS_INIT function

## -description

[Applies to KMDF and UMDF]

The WDF_DRIVER_VERSION_AVAILABLE_PARAMS_INIT function initializes a WDF_DRIVER_VERSION_AVAILABLE_PAR


sites

around the world, quite slow and busy at times. ("This server is located in

Trondheim, Norway")

Archie request form (but you better use Archie trough email,

see here how to do it).

Here a useful list of Archie services (gateways) in the World Wide Web.

The latest version is always at http://www.nexor.com/public/archie

All search engines

of the planet... the coveted list by Andrei Nedashkovsky (some of the links do not work, though)

  Planet search

  And, finally, a 'portal' to the

<A href="javascript:if(confirm('http://www.atrium.com/search.html  \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set


    return ans
};

var result = [0];
var ceil = 2;
var k = 0;
var n = 1;
var mod = Math.pow(10, 9) + 7;

while (n <= 100000) {
    for(; n < ceil && n <= 100000; n++) {
        result[n] = (result[n-1] * ceil + n) % mod;
    }
    k++;
    ceil*=2;
}

/**
 * @param {number} n
 * @return {number}
 */
var concatenatedBinaryIV = function(n) {
    return result[n];
};import parseTokens from "./parseTokens";

describe("Word Separators", () => {
  // prettier-ignore
  let tests: { [input: string]: Array<string> } = {
    "Hello World": ["hello", "world"],
    "Hello-World": ["hello", "world"],
    "Hello·World": ["hello", "world"],
    "Hello•World": ["hello", "world"],
    "Hello_World": ["hello", "world"],
    "Hello…World": ["hello", "world"],
    "Hello(World)": ["hello", "world"],
    "Hello<World>": ["hello", "world"],
    "Hello  World": ["hello", "world"],
    "Hello   World": ["hello", "world"],
    "Hello:  World": ["hello", "world"],
    "Hello---World": ["hello", "world"],
    "¡Hello World!": ["hello", "world"],
    "Hello #1 World": ["hello", "1", "world"],
    "Hello.... World": ["hello", "world"],
    "Hello #@$%! World": ["hello", "world"],
    "Hello…...^-There-^...…World": ["hello", "there", "world"],
    "A$B$C$D$E$F$G$H": ["a", "b", "c", "d", "e", "f", "g", "h"],
  };

  Object.keys(tests).forEach((input) => {
    it(`should split at word boundaries (${input})`, () => {
      expect(parseTokens(input)).toEqual(tests[input]);
    });
  });
});

describe("Retaining 'and' Symbols", () => {
  let tests: { [input: string]: Array<string> } = {
    "He+llo": ["he", "+", "llo"],
    "Hello +": ["hello", "+"],
    "Hello+World": ["hello", "+", "world"],
    "Hello + World": ["hello", "+", "world"],
    "Hello&World": ["hello", "&", "world"],
    "Hello & World": ["hello", "&", "world"],
  };

  Object.keys(tests).forEach((input) => {
    it(`should retain 'and' symbols as their own token (${input})`, () => {
      expect(parseTokens(input)).toEqual(tests[input]);
    });
  });
});

// From Movie "Titles with Unusual Symbols"
// https://www.imdb.com/list/ls098136839/

describe("Movie Titles with Unusual Symbols", () => {
  let movies: { [input: string]: Array<string> } = {
    "Æon Flux": ["aeon", "flux"],
    "Romeo & Juliet": ["romeo", "&", "juliet"],
    "8½": ["8"],
    "WALL·E": ["wall", "e"],
    "61*": ["61"],
    "Bigger Stronger Faster*": ["bigger", "stronger", "faster"],
    "Blood+": ["blood", "+"],
    "Tristan + Isolde": ["tristan", "+", "isolde"],
    "Patti Cake$": ["patti", "cake"],
    "*batteries not included": ["batteries", "not", "included"],
    "Bat*21": ["bat", "21"],
    "$5 a Day": ["5", "a", "day"],
    "9½ Weeks": ["9", "weeks"],
    // The following examples could be better, but are reasonable.
    // Since they're edge cases I won't sweat them too much for now.
    "M*A


case 16: {
    if (l != 0)
      throw std::runtime_error("Wrong number of elements");
    return Dtype::float8_e5m2_x4;
    break;
  }
  case 17: {
    if (l != 0)
      throw std::runtime_error("Wrong number of elements");
    return Dtype::float8_e4m3fn_x4;
    break;
  }
  case 18: {
    if (l != 0)
      throw std::runtime_error("Wrong number of elements");
    return Dtype::float4_e2m1fn_x4;
    break;
  }
  default:
    throw std::runtime_error("Invalid value tag");
  }
}

Ptr<Shape> Shape_des(FILE *in) {
  u8 t, c, l;
  if (!deserialize_tag(in, &t, &c, &l))
    throw std::runtime_error("Could not find tag");
  if (t != 112 || c != 0 || l != 2)
    throw std::runtime_error("Invalid Tag");
  Ptr<Shape> x = ptr<Shape>();
  x->parDim = Nat_des(in);
  x->freeDims = List_Nat_des(in);
  return x;
}

Ptr<Address> Address_des(FILE *in) {
  u8 t, c, l;
  if (!deserialize_tag(in, &t, &c, &l))
    throw std::runtime_error("Could not find tag");
  if (t != 113 || c != 0 || l != 7)
    throw std::runtime_error("Invalid Tag");
  Ptr<Address> x = ptr<Address>();
  x->name = String_des(in);
  x->memory = Memory_des(in);
  x->parSize = Nat_des(in);
  x->freeSize = Nat_des(in);
  x->parOffset = Option_Nat_des(in);
  x->freeOffset = Option_Nat_des(in);
  x->isShared = Bool_des(in);
  return x;
}

Ptr<TensorName> TensorName_des(FILE *in) {
  u8 t, c, l;
  if (!deserialize_tag(in, &t, &c, &l))
    throw std::runtime_error("Could not find tag");
  if (t != 114 || c != 0 || l != 7)
    throw std::runtime_error("Invalid Tag");
  Ptr<TensorName> x = ptr<TensorName>();
  x->name = String_des(in);
  x->dtype = Dtype_des(in);
  x->shape = Shape_des(in);
  x->address = Address_des(in);
  x->freeElements = Nat_des(in);
  x->parWF = Prop_des(in);
  x->freeWF = Prop_des(in);
  return x;
}

Ptr<Slice> Slice_des(FILE *in) {
  u8 t, c, l;
  if (!deserialize_tag(in, &t, &c, &l))
    throw std::runtime_error("Could not find tag");
  if (t != 115 || c != 0 || l != 4)
    throw std::runtime_error("Invalid Tag");
  Ptr<Slice> x = ptr<Slice>();
  x->l = Nat_des(in);
  x->u = Nat_des(in);
  x->step = Int_des(in);
  x->wf = Prop_des(in);
  return x;
}

Ptr<Index> Index_des(FILE *in) {
  u8 t, c, l;
  if (!deserialize_tag(in, &t, &c, &l))
    throw std::runtime_error("Could not read tag");
  if (t != 117)
    throw std::runtime_error("Unexpected type tag");
  switch (c) {
  case 0: {
    if (l != 1)
      throw std::runtime_error("Wrong number of elements");
    Ptr<IndexCoordWrapper> x = ptr<IndexCoordWrapper>();
    x->e = Nat_des(in);
    return x;
    break;
  }
  case 1: {
    i


</para>
        /// <para>
        /// If the feature ID is out-of-range, or if the property table property is
        /// somehow invalid, the user-defined default value is returned.
        /// </para>
        /// </remarks>
        /// <param name="featureID">The ID of the feature.</param>
        /// <param name="defaultValue">The default value to fall back on.</param>
        /// <returns>The property value as a String.</returns>
        public partial String GetString(Int64 featureID, String defaultValue = "");

        /// <summary>
        /// Attempts to retrieve the value for the given feature as a
        /// <see cref="CesiumPropertyArray"/>. If the property is not an array type, this returns an
        /// empty array.
        ///
        /// For numeric array properties, the raw array value for a given feature will
        /// be transformed by the property's normalization, scale, and offset before it
        /// is further converted. If the raw value is equal to the property's "no data"
        /// value, then the property's default value will be converted if possible. If
        /// the property-defined default value cannot be converted, or does not exist,
        /// then the user-defined default value is returned.
        ///
        /// </summary>
        /// <param name="featureID">The ID of the feature.</param>
        /// <returns>The property value as a CesiumPropertyArray.</returns>
        public partial CesiumPropertyArray GetArray(Int64 featureID);

        /// <summary>
        /// Retrieves the value of the property for the given feature as a
        /// <see cref="CesiumMetadataValue"/>. This allows the value


) are given but no tls config.
func TestDialTLSNoConfig(t *testing.T) {
	defer testutil.AfterTest(t)
	clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 1, ClientTLS: &testTLSInfo, SkipCreatingClient: true})
	defer clus.Terminate(t)
	// expect "signed by unknown authority"
	c, err := clientv3.New(clientv3.Config{
		Endpoints:   []string{clus.Members[0].GRPCAddr()},
		DialTimeout: time.Second,
		DialOptions: []grpc.DialOption{grpc.WithBlock()},
	})
	defer func() {
		if c != nil {
			c.Close()
		}
	}()
	if !isClientTimeout(err) {
		t.Fatalf("expected dial timeout error, got %v", err)
	}
}

// TestDialSetEndpointsBeforeFail ensures SetEndpoints can replace unavailable
// endpoints with available ones.
func TestDialSetEndpointsBeforeFail(t *testing.T) {
	testDialSetEndpoints(t, true)
}

func TestDialSetEndpointsAfterFail(t *testing.T) {
	testDialSetEndpoints(t, false)
}

// testDialSetEndpoints ensures SetEndpoints can replace unavailable endpoints with available ones.
func testDialSetEndpoints(t *testing.T, setBefore bool) {
	defer testutil.AfterTest(t)
	clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 3, SkipCreatingClient: true})
	defer clus.Terminate(t)

	// get endpoint list
	eps := make([]string, 3)
	for i := range eps {
		eps[i] = clus.Members[i].GRPCAddr()
	}
	toKill := rand.Intn(len(eps))

	cfg := clientv3.Config{
		Endpoints:   []string{eps[toKill]},
		DialTimeout: 1 * time.Second,
		DialOptions: []grpc.DialOption{grpc.WithBlock()},
	}
	cli, err := clientv3.New(cfg)
	if err != nil {
		t.Fatal(err)
	}
	defer cli.Close()

	if setBefore {
		cli.SetEndpoints(eps[toKill%3], eps[(toKill+1)%3])
	}
	// make a dead node
	clus.Members[toKill].Stop(t)
	clus.WaitLeader(t)

	if !setBefore {
		cli.SetEndpoints(eps[toKill%3], eps[(toKill+1)%3])
	}
	time.Sleep(time.Second * 2)
	ctx, cancel := context.WithTimeout(context.Background(), integration.RequestWaitTimeout)
	if _, err = cli.Get(ctx, "foo", clientv3.WithSerializable()); err != nil {
		t.Fatal(err)
	}
	cancel()
}

// TestSwitchSetEndpoints ensures SetEndpoints can switch one endpoint
// with a new one that doesn't include original endpoint.
func TestSwitchSetEndpoints(t *testing.T) {
	defer testutil.AfterTest(t)
	clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 3})
	defer clus.Terminate(t)

	// get non partitioned members endpoints
	eps := []string{clus.Members[1].GRPCAddr(), clus.Members[2].GRPCAddr()}

	cli := clus.Client(0)
	clus.Members[0].InjectPartition(t, clus.Members[1:]...)

	cli.SetEndpoints(eps...)

	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()
	if _, err := cli.Get(ctx, "foo"); err != nil {
		t.Fatal(err)
	}
}

func TestRejectOldCluster(t *testing.T) {
	defer testutil.AfterTest(t)
	// 2 endpoints to test multi-endpoint Status
	clus := integration.NewClusterV3(t, &i


 = () => TraktPost.NewSyncHistoryRemovePost()
                .WithMovie(movieIds)
                .Build();

            act.Should().Throw<ArgumentNullException>();
        }

        [Fact]
        public void Test_TraktPost_SyncHistoryRemovePostBuilder_WithMovies_ITraktMovie_ArgumentExceptions()
        {
            List<ITraktMovie> movies = null;

            Func<ITraktSyncHistoryRemovePost> act = () => TraktPost.NewSyncHistoryRemovePost()
                .WithMovies(movies)
                .Build();

            act.Should().Throw<ArgumentNullException>();
        }

        [Fact]
        public void Test_TraktPost_SyncHistoryRemovePostBuilder_WithMovies_ITraktMovieIds_ArgumentExceptions()
        {
            List<ITraktMovieIds> movieIds = null;

            Func<ITraktSyncHistoryRemovePost> act = () => TraktPost.NewSyncHistoryRemovePost()
                .WithMovies(movieIds)
                .Build();

            act.Should().Throw<ArgumentNullException>();
        }
    }
}


webkit-box-shadow:0 0 7px #eee;-moz-box-shadow:0 0 7px #eee;z-index:99999}#bdshare_pop{width:300px;border:6px solid #8f8f8f;padding:0;background:#f6f6f6;position:absolute;z-index:1000000;text-align:left}#bdshare_pop{-webkit-border-radius:5px;-moz-border-radius:5px}#bdshare_pop{-webkit-box-shadow:0 0 7px #aaa;-moz-box-shadow:0 0 7px #aaa}#bdshare_pop div{border:1px solid #e9e9e9;float:left;overflow:hidden;text-align:left}#bdshare_pop h5{width:100%;height:28px;color:#626262;font:14px/28px '宋体';font-weight:700;text-indent:.5em;float:left;margin:0;overflow:hidden}#bdshare_pop h5 b{width:22px;height:23px;background:url("") no-repeat 0 0;cursor:pointer;position:absolute;right:8px;top:4px}#bdshare_pop ul{width:100%;height:256px;background:#fff;float:left;padding:8px 0;margin:0;border-top:1px solid #f2f1f1;border-bottom:1px solid #f2f1f1;overflow:auto;overflow-x:hidden}#bdshare_pop ul li{width:130px;float:left;padding:2px;margin-left:6px;_margin-left:3px;height:29px;overflow:hidden}#bdshare_pop ul li a{background:url("") no-repeat;color:#565656;font:12px '宋体';display:block;width:75%;padding:6px 0 6px 28px;border:1px solid #fff}#bdshare_pop ul li a:hover{background-color:#f3f3f3;border:1px solid #eee;-webkit-border-radius:3px;-moz-border-radius:3px}#bdshare_pop p{width:100%;font:12px '宋体';float:left;padding:5px 0 8px;margin:0;overflow:hidden}#bdshare_pop p a{width:auto;text-align:right;float:right;padding:0 5px}#bdshare_l_c p a.goWebsite,#bdshare_m_c p a.goWebsite,#bdshare_pop p a.goWebsite{text-align:right;background:url("") no-repeat 0 center;line-height:16px;padding-left:12px;color:#8c8c8c}#bdshare_l_c p a.goWebsite:hover,#bdshare_m_c p a.goWebsite:hover,#bdshare_pop p a.goWebsite:hover{color:#00a9e0}span.bds_more{background:url(../images/is.png?cdnversion=20131219) no-repeat 0 5px!important}span.bds_more,.bds_tools a{display:block;font-family:'宋体',Arial;height:16px;float:left;cursor:pointer;padding-top:6px;padding-bottom:3px;padding-left:22px}.bds_tools a{background:url(../images/is.png?cdnversion=20131219) no-repeat}.bds_tools_32 a{background:url("") no-repeat;width:37px;height:37px;display:block;float:left;margin-right:3px;text-indent:-100em;cursor:pointer}.bds_tools_32 span.bds_more{background:url("") no-repeat 0 5px!important;width:37px;height:32px;text-indent:-100em;padding-left:0}.bds_tools_24 a{background:url("") no-repeat;width:29px;height:29px;display:block;float:left;margin-right:3px text-indent:-100em;padding-left:0;cursor:pointer}.bds_tools_24 span.bds_more{background:url("") no-repeat 0 5px!important;width:29px;height:24px;text-indent:-100em;padding-left:0}.bds_more{background-image:url("")!importa


nt, GLuint * params) {
//   (*fnptr)(memory, pname, first, count, params);
// }
// static void  glowGetMemoryObjectParameterivEXT(GPGETMEMORYOBJECTPARAMETERIVEXT fnptr, GLuint  memoryObject, GLenum  pname, GLint * params) {
//   (*fnptr)(memoryObject, pname, params);
// }
// static void  glowGetMultisamplefv(GPGETMULTISAMPLEFV fnptr, GLenum  pname, GLuint  index, GLfloat * val) {
//   (*fnptr)(pname, index, val);
// }
// static void  glowGetNextPerfQueryIdINTEL(GPGETNEXTPERFQUERYIDINTEL fnptr, GLuint  queryId, GLuint * nextQueryId) {
//   (*fnptr)(queryId, nextQueryId);
// }
// static void  glowGetObjectLabel(GPGETOBJECTLABEL fnptr, GLenum  identifier, GLuint  name, GLsizei  bufSize, GLsizei * length, GLchar * label) {
//   (*fnptr)(identifier, name, bufSize, length, label);
// }
// static void  glowGetObjectLabelEXT(GPGETOBJECTLABELEXT fnptr, GLenum  type, GLuint  object, GLsizei  bufSize, GLsizei * length, GLchar * label) {
//   (*fnptr)(type, object, bufSize, length, label);
// }
// static void  glowGetObjectLabelKHR(GPGETOBJECTLABELKHR fnptr, GLenum  identifier, GLuint  name, GLsizei  bufSize, GLsizei * length, GLchar * label) {
//   (*fnptr)(identifier, name, bufSize, length, label);
// }
// static void  glowGetObjectPtrLabel(GPGETOBJECTPTRLABEL fnptr, const void * ptr, GLsizei  bufSize, GLsizei * length, GLchar * label) {
//   (*fnptr)(ptr, bufSize, length, label);
// }
// static void  glowGetObjectPtrLabelKHR(GPGETOBJECTPTRLABELKHR fnptr, const void * ptr, GLsizei  bufSize, GLsizei * length, GLchar * label) {
//   (*fnptr)(ptr, bufSize, length, label);
// }
// static void  glowGetPathCommandsNV(GPGETPATHCOMMANDSNV fnptr, GLuint  path, GLubyte * commands) {
//   (*fnptr)(path, commands);
// }
// static void  glowGetPathCoordsNV(GPGETPATHCOORDSNV fnptr, GLuint  path, GLfloat * coords) {
//   (*fnptr)(path, coords);
// }
// static void  glowGetPathDashArrayNV(GPGETPATHDASHARRAYNV fnptr, GLuint  path, GLfloat * dashArray) {
//   (*fnptr)(path, dashArray);
// }
// static GLfloat  glowGetPathLengthNV(GPGETPATHLENGTHNV fnptr, GLuint  path, GLsizei  startSegment, GLsizei  numSegments) {
//   return (*fnptr)(path, startSegment, numSegments);
// }
// static void  glowGetPathMetricRangeNV(GPGETPATHMETRICRANGENV fnptr, GLbitfield  metricQueryMask, GLuint  firstPathName, GLsizei  numPaths, GLsizei  stride, GLfloat * metrics) {
//   (*fnptr)(metricQueryMask, firstPathName, numPaths, stride, metrics);
// }
// static void  glowGetPathMetricsNV(GPGETPATHMETRICSNV fnptr, GLbitfield  metricQueryMask, GLsizei  numPaths, GLenum  pathNameType, const void * paths, GLuint  pathBase, GLsizei  stride, GLfloat * metrics) {
//   (*fnptr)(metricQueryMask, numPaths, pathNameType, paths, pathBase, stride, metrics);
// }
// static void  glowGetPathParameterfvNV(GPGETPATHPARAMETERFVNV fnptr, GLuint  path, GLenum  pname, GLfloat * value) {
//


df('image/jpeg')).toBe(false);
	});

	it('should check documents', () => {
		expect(isDoc('application/msword')).toBe(true);
		expect(isDoc('application/vnd.ms-excel')).toBe(true);
		expect(isDoc('application/vnd.oasis.opendocument.text')).toBe(true);
		expect(isDoc('application/vnd.oasis.opendocument.graphics')).toBe(true);
		expect(isDoc('application/vnd.oasis.opendocument.spreadsheet')).toBe(true);
		expect(isDoc('application/vnd.openxmlformats-officedocument.wordprocessingml.document')).toBe(true);
		expect(isDoc('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')).toBe(true);
		expect(isDoc('image/jpeg')).toBe(false);
	});

	it('should check zips', () => {
		expect(isZip('application/x-zip-compressed')).toBe(true);
		expect(isZip('application/zip')).toBe(true);
		expect(isZip('image/jpeg')).toBe(false);
	});

	it('should check images', () => {
		expect(isImage('image/jpeg')).toBe(true);
		expect(isImage('image/jpg')).toBe(true);
		expect(isImage('image/png')).toBe(true);
		expect(isImage('image/gif')).toBe(true);
		expect(isImage('image/tif')).toBe(true);
		expect(isImage('image/tiff')).toBe(true);
		expect(isImage('image/bmp')).toBe(true);
		expect(isImage('image/*')).toBe(true);
		expect(isImage('application/pdf')).toBe(false);
	});

	it('should check jpg images', () => {
		expect(isJpg('image/jpeg')).toBe(true);
		expect(isJpg('image/jpg')).toBe(false);
		expect(isJpg('image/png')).toBe(false);
	});

	it('should check mimetypes from filenames', () => {
		expect(mimetypeFromFilename('blah.jpg')).toBe('image/jpeg');
		expect(mimetypeFromFilename('blah.doc')).toBe('application/msword');
		expect(mimetypeFromFilename('blah.zip')).toBe('application/zip');
	});

	it('should get an extension from a mimetype', () => {
		expect(extFromMimetype('image/jpeg')).toBe('jpeg');
		expect(extFromMimetype('application/zip')).toBe('zip');
		expect(extFromMimetype('application/msword')).toBe('doc');
	});
});
export class CommentPost{
  public item: string;

  constructor(item: string){
    this.item = item;
  }
}
import * as assert from 'assert'
import { pipe } from 'fp-ts/pipeable'
import * as S from 'graphics-ts/lib/Shape'
import * as r from 'rxjs'
import * as ro from 'rxjs/operators'
import { windowInnerHeight, windowInnerWidth, windowRect$ } from '../src/Window'

// source:
// https://stackoverflow.com/questions/45868042/figuring-out-how-to-mock-the-window-size-changing-for-a-react-component-test

const mutateWindowSize = (dimension: 'Width' | 'Height', value: number) =>
  Object.defineProperty(window, `inner${dimension}`, {
    writable: true,
    configurable: true,
    value,
  })

const initialWidth = 100
const initialHeight = 100

describe('window helpers', () => {
  beforeEach(() => {
    mutateWindowSize('Width', initialWidth)
    mutateWindowSize('Height', initialHeight)
  })
  describe('windowInnerWidth', () => {
    it('should get the correct width', () => {
      expect(windowInnerWidth()).toBe(initialWidth)
    })
  })

  describe('windowInnerHeight', () => {
    it('should get the correct height', () => {
      ex


local ReplicatedStorage = game:GetService("ReplicatedStorage")

local EquipmentUtil = require(ReplicatedStorage.Core.EquipmentUtil)
local GunScaling = require(ReplicatedStorage.Core.GunScaling)
local LootStyles = require(ReplicatedStorage.Core.LootStyles)
local PerkUtil = require(ReplicatedStorage.Core.Perks.PerkUtil)
local PetsDictionary = require(ReplicatedStorage.Core.PetsDictionary)
local QualityDictionary = require(ReplicatedStorage.Core.QualityDictionary)
local t = require(ReplicatedStorage.Vendor.t)

local Loot = {}

local gunMap = {
	"Type",
	"Level",
	"Rarity",
	"Bonus",
	"Model",
	"Favorited",
	"UUID",
	"Seed",
	"Perks",
	"Attachment", -- Should be last since it can be nil
}

local armorMap = {
	"Type",
	"Level",
	"Rarity",
	"Model",
	"Upgrades",
	"Favorited",
	"UUID",
}

local petMap = {
	"Type",
	"Rarity",
	"Favorited",
	"Model",
	"UUID",
}

Loot.Rarities = LootStyles

Loot.Attachments = {
	"Magazine",
	"Laser",
	"Silencer",
}

Loot.GunTypes = {
	"Pistol",
	"Rifle",
	"SMG",
	"Shotgun",
	"Sniper",
	"Crystal",
}

local attachmentType = t.union(
	t.literal("Magazine"),
	t.literal("Laser"),
	t.literal("Silencer")
)

local serializeStruct = t.union(
	t.strictInterface({
		Level = t.number,
		Rarity = t.numberConstrained(1, #Loot.Rarities),
		Type = function(gunType)
			return table.find(Loot.GunTypes, gunType) ~= nil
		end,

		Attachment = t.optional(
			t.strictInterface({
				Type = attachmentType,
				Model = t.number,
				Rarity = t.numberConstrained(1, #Loot.Rarities),
				UUID = t.string,
			})
		),

		Bonus = t.number,
		Favorited = t.boolean,
		Seed = t.number,

		Perks = t.array(t.strictArray(t.number, t.number)),

		Model = t.number,
		UUID = t.string,
	}),

	t.strictInterface({
		Level = t.number,
		Rarity = t.numberConstrained(1, #Loot.Rarities),
		Type = t.union(
			t.literal("Armor"),
			t.literal("Helmet")
		),

		Upgrades = t.number,
		Favorited = t.boolean,

		Model = t.number,
		UUID = t.string,
	}),

	t.interface({
		Rarity = t.numberConstrained(1, #Loot.Rarities),
		Type = attachmentType,

		Favorited = t.boolean,

		Model = t.number,
		UUID = t.string,
	}),

	t.interface({
		Rarity = t.numberConstrained(1, #PetsDictionary.Rarities),
		Type = t.literal("Pet"),

		Favorited = t.boolean,

		Model = t.numberConstrained(1, #PetsDictionary.Pets),
		UUID = t.string,
	})
)

function Loot.Deserialize(data)
	local loot = {}
	local map = gunMap

	if data[1] == "Armor" or data[1] == "Helmet" then
		map = armorMap
	elseif data[1] == "Pet" or table.find(Loot.Attachments, data[1]) then
		map = petMap
	end

	for index, key in pairs(map) do


tte : Potion de protection contre l’Ombre majeure",
[22925] = "Recette : Potion de protection contre le Sacré majeure",
[22926] = "Recette : Elixir de renforcement",
[22927] = "Recette : Potion de bouclier de fer",
[22928] = "Cristal simple",
[22929] = "Cristal glyphé",
[22930] = "Une enveloppe tachée de sang",
[22931] = "Cristal béni",
[22932] = "Une lettre déchirée",
[22933] = "[UNUSED] Abom Stoone",
[22934] = "Echantillon de fouette-racine",
[22935] = "Larme de givre",
[22936] = "Garde-poignets de vengeance",
[22937] = "Gemme de Nérubis",
[22938] = "Cape en soie de démon des cryptes",
[22939] = "Bague des prières inexaucées",
[22940] = "Espauliers plaie-de-glace",
[22941] = "Protège-épaules polaires",
[22942] = "L'Etreinte de la veuve",
[22943] = "Pendentif de la pierre malveillante",
[22944] = "Une missive froissée",
[22945] = "Une note détériorée",
[22946] = "Une page abîmée",
[22947] = "Pendentif des noms oubliés",
[22948] = "Un document taché",
[22949] = "Cristal nécrotique fêlé",
[22950] = "Cristal nécrotique voilé",
[22951] = "Jambières en peau de Preste-patte",
[22952] = "Cape en peau de Preste-patte",
[22953] = "Cotte d'anneaux bordée de fourrure",
[22954] = "Baiser de l'araignée",
[22955] = "Produit neutralisant",
[22956] = "Masse rouillée",
[22957] = "Epée sin'dorei rouillée",
[22958] = "Epée de pérégrin",
[22959] = "Bâton lisse en métal",
[22960] = "Cape de suture",
[22961] = "Bague de réanimation",
[22962] = "Cristal d'inoculation",
[22963] = "Couteau de poche de forestier",
[22964] = "Brassards des Voiles du Soleil",
[22965] = "Manchettes de débardeur",
[22966] = "Protège-poignets en soie",
[22967] = "Spallières glacécaille",
[22968] = "Mantelet glaciaire",
[22969] = "Arc de Ven'jashi",
[22970] = "Une enveloppe tachée de sang",
[22971] = "Baguette porte-guigne",
[22972] = "Une note détériorée",
[22973] = "Une missive froissée",
[22974] = "Une page abîmée",
[22975] = "Un document taché",
[22976] = "Bourse de magistère",
[22977] = "Une lettre déchirée",
[22978] = "Pièce de rechange pour l'émetteur",
[22979] = "Bague de tueur",
[22980] = "Bâton du soleil",
[22981] = "Torque perdu de Gluth",
[22982] = "Arc long de pérégrin",
[22983] = "Mantelet couvert de gel",
[22984] = "Lame de l'aube",
[22985] = "Haubert de Solcouronne",
[22986] = "Robe d'apothicaire",
[22987] = "Gilet de nécrotraqueur",


务框架，基于它可以快速构建微服务。示例代码如图所示：

8、[now](https://hellogithub.com/periodical/statistics/click?target=https://github.com/jinzhu/now)：Go 语言的时间工具库。项目简单、代码易懂，示例代码丰富：
```go
import "github.com/jinzhu/now"

time.Now() // 2013-11-18 17:51:49.123456789 Mon

now.BeginningOfMinute()        // 2013-11-18 17:51:00 Mon
now.BeginningOfHour()          // 2013-11-18 17:00:00 Mon
now.BeginningOfDay()           // 2013-11-18 00:00:00 Mon
now.BeginningOfWeek()          // 2013-11-17 00:00:00 Sun
now.BeginningOfMonth()         // 2013-11-01 00:00:00 Fri
now.BeginningOfQuarter()       // 2013-10-01 00:00:00 Tue
now.BeginningOfYear()          // 2013-01-01 00:00:00 Tue

now.WeekStartDay = time.Monday // Set Monday as first day, default is Sunday
now.BeginningOfWeek()          // 2013-11-18 00:00:00 Mon

now.EndOfMinute()              // 2013-11-18 17:51:59.999999999 Mon
now.EndOfHour()                // 2013-11-18 17:59:59.999999999 Mon
now.EndOfDay()                 // 2013-11-18 23:59:59.999999999 Mon
now.EndOfWeek()                // 2013-11-23 23:59:59.999999999 Sat
now.EndOfMonth()               // 2013-11-30 23:59:59.999999999 Sat
now.EndOfQuarter()             // 2013-12-31 23:59:59.999999999 Tue
now.EndOfYear()                // 2013-12-31 23:59:59.999999999 Tue

now.WeekStartDay = time.Monday // Set Monday as first day, default is Sunday
now.EndOfWeek()                // 2013-11-24 23:59:59.999999999 Sun
```

9、[pgweb](https://hellogithub.com/periodical/statistics/click?target=https://github.com/sosedoff/pgweb)：基于 Go 实现的跨平台 PostgreSQL 数据库管理工具。通过本地起服务+浏览器的方式解决了跨平台的问题，启动命令：
```
三种方式：

参数：pgweb --host localhost --user myuser --db mydb
URL：pgweb --url postgres://user:password@host:port/database?sslmode=[mode]
Socket：pgweb --url "postgres:///database?host=/absolute/path/to/unix/socket/dir"
```

<img src='https://raw.githubusercontent.com/521xue


"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"},week:{dow:1,doy:4}}),a.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h시 m분",LTS:"A h시 m분 s초",L:"YYYY.MM.DD",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h시 m분",LLLL:"YYYY년 MMMM D일 dddd A h시 m분"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇초",ss:"%d초",m:"일분",mm:"%d분",h:"한시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한달",MM:"%d달",y:"일년",yy:"%d년"},ordinalParse:/\d{1,2}일/,ordinal:"%d일",meridiemParse:/오전|오후/,isPM:function(a){return"오후"===a},meridiem:function(a,b,c){return 12>a?"오전":"오후"}}),a.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),weekdays


png)

  此外，即使可以让模块代码直接修改游戏对象的内部（通过将 `self` 传递给模块函数），我们也强烈不鼓励您这样做，因为您会创建非常紧密的耦合。

带有封装行为的辅助游戏对象
: 就像您可以将脚本代码包含在 Lua 模块中一样，您也可以将其包含在带有脚本组件的游戏对象中。不同之处在于，如果将其包含在游戏对象中，您只能严格通过消息传递与其通信。

  ![Helper](images/lua/lua_helper.png)

在集合内将游戏对象与辅助行为对象分组
: 在此设计中，您可以创建一个自动作用于另一个目标游戏对象的行为游戏对象，要么通过预定义的名称（用户必须重命名目标游戏对象以匹配），要么通过指向目标游戏对象的 `go.property()` URL。

  ![Collection](images/lua/lua_collection.png)

  这种设置的好处是您可以将行为游戏对象拖放到包含目标对象的集合中。不需要额外的代码。

  在需要管理大量游戏对象的情况下，这种设计不是可取的，因为行为对象会为每个实例重复，每个对象都会消耗内存。
## 下载

前往 [Defold 下载页面](https://defold.com/download/)，您会找到适用于 macOS、Windows 和 Linux (Ubuntu) 的下载按钮：

![download editor](../shared/images/editor_download.png)

## 安装

在 macOS 上安装
: 下载的文件是一个包含程序的 DMG 镜像文件。

  1. 找到文件 "Defold-x86_64-macos.dmg" 并双击它以打开镜像。
  2. 将应用程序 "Defold" 拖到 "Applications" 文件夹链接中。

  要启动编辑器，请打开您的 "Applications" 文件夹并双击文件 "Defold"。

  ![Defold macOS](../shared/images/macos_content.png)

在 Windows 上安装
: 下载的文件是一个需要解压的 ZIP 压缩包：

  1. 找到压缩包文件 "Defold-x86_64-win32.zip"，按住（或右键单击）该文件夹，选择*全部解压*，然后按照说明将压缩包解压到一个名为 "Defold" 的文件夹中。
  2. 将文件夹 "Defold" 移动到您喜欢的位置（例如 `D:\Defold`）。您不应将 Defold 移动到 `C:\Program Files (x86)\` 或 `C:\Program Files\`，因为这会阻止编辑器更新。

  要启动编辑器，请打开文件夹 "Defold" 并<kbd


            api(libs.sqlDelight.androidx.driver) // Expose the driver for transitive dependencies
        }

    }
    compilerOptions {
        freeCompilerArgs.add("-Xexpect-actual-classes")
    }

    androidTarget {
        @OptIn(ExperimentalKotlinGradlePluginApi::class)
        instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test)
    }
}

android {
    namespace = "com.mercury.sqkon"
    compileSdk = 35

    defaultConfig {
        minSdk = 23
        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }

    @Suppress("UnstableApiUsage")
    testOptions {
        managedDevices {
            localDevices {
                create("mediumPhoneApi35") {
                    device = "Medium Phone"
                    apiLevel = 35
                    systemImageSource = "aosp-atd"
                }
            }
        }
    }
}

dependencies {
    androidTestImplementation(libs.androidx.test.monitor)
    androidTestImplementation(libs.androidx.test.runner)
}

sqldelight {
    databases {
        create("SqkonDatabase") {
            // Database configuration here.
            // https://cashapp.github.io/sqldelight
            // We disable async as it's effectively broken on multithreaded platforms with
            // coroutines (more of a driver issue)
            generateAsync = false
            packageName.set("com.mercury.sqkon.db")
            schemaOutputDirectory.set(file("src/commonMain/sqldelight/databases"))
            // We're technically using 3.45.0, but 3.38 is the latest supported version
            dialect("app.cash.sqldelight:sqlite-3-38-dialect:$VERSION")
        }
    }
}

androidComponents {
    beforeVariants {
        it.enableAndroidTest = true
        (it as HasUnitTestBuilder).enableUnitTest = false
    }
}
@file:OptIn(ExperimentalUuidApi::class)

package com.mercury.sqkon.db

import com.mercury.sqkon.TestEnum
import com.mercury.sqkon.TestObject
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.cancel
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.test.runTest
import kotlin.test.AfterTest
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.uuid.ExperimentalUuidApi

class KeyValueStorageEnumTest {

    private val mainScope = MainScope()
    private val driver = driverFactory().createDriver()
    private val entityQueries = EntityQueries(driver)
    private val metadataQueries = MetadataQueries(driver)
    private val testObjectStorage = keyValueStorage<TestObject>(
        "test-object", entityQueries, metadataQueries, mainScope
    )

    @AfterTest
    fun tearDown() {
        mainScope.cancel()
    }

    @Test
    fun select_byEnum() = runTest {
        val expected = (1..10).map {
            TestObject(testEnum = TestEnum.FIRST)
        }.associateBy { it.id }
        testObjectStorage.insertAll(expected)
        val bySecondEnum = testObjectStorage.select(
            where = TestObject::testEnum eq TestEnum.SECOND,
        ).first()
        val byFirstEnum = testObjectStorage.select(
            where = TestObject::testEnum eq TestEnum.FIRST,
        ).first()

        assertEquals(0, bySecondEnum.size)
        assertEquals(expected.size, byFirstEnum.size)
    }

    @Test
    fun select_bySerialNameEnum() = runTest {
        val expected = (1..10).map {
            TestObject(testEnum = TestEnum.LAST)
        }.associateBy { it.id }
        testObjectStorage.insertAll(expected)
        val bySecondEnum = testObjectStorage.select(
            where = TestObject::testEnum eq TestEnum.SECOND,
        ).first()
        // Broken due to lack of serialName support from descriptors
        val by