export const abi = [
  {
    inputs: [
      {
        internalType: "address",
        name: "_allo",
        type: "address",
      },
      {
        internalType: "string",
        name: "_name",
        type: "string",
      },
    ],
    stateMutability: "nonpayable",
    type: "constructor",
  },
  {
    inputs: [],
    name: "ALLOCATION_ACTIVE",
    type: "error",
  },
  {
    inputs: [],
    name: "ALLOCATION_NOT_ACTIVE",
    type: "error",
  },
  {
    inputs: [],
    name: "ALLOCATION_NOT_ENDED",
    type: "error",
  },
  {
    inputs: [],
    name: "ALREADY_INITIALIZED",
    type: "error",
  },
  {
    inputs: [],
    name: "AMOUNT_MISMATCH",
    type: "error",
  },
  {
    inputs: [],
    name: "ANCHOR_ERROR",
    type: "error",
  },
  {
    inputs: [],
    name: "ARRAY_MISMATCH",
    type: "error",
  },
  {
    inputs: [],
    name: "INVALID",
    type: "error",
  },
  {
    inputs: [],
    name: "INVALID_ADDRESS",
    type: "error",
  },
  {
    inputs: [],
    name: "INVALID_FEE",
    type: "error",
  },
  {
    inputs: [],
    name: "INVALID_METADATA",
    type: "error",
  },
  {
    inputs: [],
    name: "INVALID_REGISTRATION",
    type: "error",
  },
  {
    inputs: [],
    name: "IS_APPROVED_STRATEGY",
    type: "error",
  },
  {
    inputs: [],
    name: "MISMATCH",
    type: "error",
  },
  {
    inputs: [],
    name: "NONCE_NOT_AVAILABLE",
    type: "error",
  },
  {
    inputs: [],
    name: "NOT_APPROVED_STRATEGY",
    type: "error",
  },
  {
    inputs: [],
    name: "NOT_ENOUGH_FUNDS",
    type: "error",
  },
  {
    inputs: [],
    name: "NOT_IMPLEMENTED",
    type: "error",
  },
  {
    inputs: [],
    name: "NOT_INITIALIZED",
    type: "error",
  },
  {
    inputs: [],
    name: "NOT_PENDING_OWNER",
    type: "error",
  },
  {
    inputs: [],
    name: "POOL_ACTIVE",
    type: "error",
  },
  {
    inputs: [],
    name: "POOL_INACTIVE",
    type: "error",
  },
  {
    inputs: [],
    name: "RECIPIENT_ALREADY_ACCEPTED",
    type: "error",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "recipientId",
        type: "address",
      },
    ],
    name: "RECIPIENT_ERROR",
    type: "error",
  },
  {
    inputs: [],
    name: "RECIPIENT_NOT_ACCEPTED",
    type: "error",
  },
  {
    inputs: [],
    name: "REGISTRATION_ACTIVE",
    type: "error",
  },
  {
    inputs: [],
    name: "REGISTRATION_NOT_ACTIVE",
    type: "error",
  },
  {
    inputs: [],
    name: "UNAUTHORIZED",
    type: "error",
  },
  {
    inputs: [],
    name: "ZERO_ADDRESS",
    type: "error",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: true,
        internalType: "address",
        name: "recipientId",
        type: "address",
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "amount",
        type: "uint256",
      },
      {
        indexed: false,
        internalType: "address",
        name: "token",
        type: "address",
      },
      {
        indexed: false,
        internalType: "address",
        name: "sender",
        type: "address",
      },
    ],
    name: "Allocated",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: true,
        internalType: "address",
        name: "recipientId",
        type: "address",
      },
      {
        indexed: false,
        internalType: "address",
        name: "sender",
        type: "address",
      },
    ],
    name: "Canceled",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: true,
        internalType: "address",
        name: "sender",
        type: "address",
      },
      {
        indexed: false,
        internalType: "int96",
        name: "flowRate",
        type: "int96",
      },
    ],
    name: "Distributed",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: true,
        internalType: "address",
        name: "recipientId",
        type: "address",
      },
      {
        indexed: false,
        internalType: "address",
        name: "recipientAddress",
        type: "address",
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "amount",
        type: "uint256",
      },
      {
        indexed: false,
        internalType: "address",
        name: "sender",
        type: "address",
      },
    ],
    name: "Distributed",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "uint256",
        name: "poolId",
        type: "uint256",
      },
      {
        indexed: false,
        internalType: "bytes",
        name: "data",
        type: "bytes",
      },
    ],
    name: "Initialized",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "uint256",
        name: "minPassportScore",
        type: "uint256",
      },
      {
        indexed: false,
        internalType: "address",
        name: "sender",
        type: "address",
      },
    ],
    name: "MinPassportScoreUpdated",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "bool",
        name: "active",
        type: "bool",
      },
    ],
    name: "PoolActive",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: true,
        internalType: "address",
        name: "recipientId",
        type: "address",
      },
      {
        indexed: false,
        internalType: "bytes",
        name: "data",
        type: "bytes",
      },
      {
        indexed: false,
        internalType: "address",
        name: "sender",
        type: "address",
      },
    ],
    name: "Registered",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: true,
        internalType: "address",
        name: "recipientId",
        type: "address",
      },
      {
        indexed: false,
        internalType: "enum IStrategy.Status",
        name: "status",
        type: "uint8",
      },
      {
        indexed: false,
        internalType: "address",
        name: "sender",
        type: "address",
      },
    ],
    name: "Reviewed",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "uint64",
        name: "registrationStartTime",
        type: "uint64",
      },
      {
        indexed: false,
        internalType: "uint64",
        name: "registrationEndTime",
        type: "uint64",
      },
      {
        indexed: false,
        internalType: "uint64",
        name: "allocationStartTime",
        type: "uint64",
      },
      {
        indexed: false,
        internalType: "uint64",
        name: "allocationEndTime",
        type: "uint64",
      },
      {
        indexed: false,
        internalType: "address",
        name: "sender",
        type: "address",
      },
    ],
    name: "TimestampsUpdated",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: true,
        internalType: "address",
        name: "recipientId",
        type: "address",
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "totalUnits",
        type: "uint256",
      },
    ],
    name: "TotalUnitsUpdated",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: true,
        internalType: "address",
        name: "recipientId",
        type: "address",
      },
      {
        indexed: false,
        internalType: "bytes",
        name: "data",
        type: "bytes",
      },
      {
        indexed: false,
        internalType: "address",
        name: "sender",
        type: "address",
      },
    ],
    name: "UpdatedRegistration",
    type: "event",
  },
  {
    inputs: [],
    name: "NATIVE",
    outputs: [
      {
        internalType: "address",
        name: "",
        type: "address",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "uint256",
        name: "_previousFlowrate",
        type: "uint256",
      },
      {
        internalType: "uint256",
        name: "_newFlowRate",
        type: "uint256",
      },
    ],
    name: "adjustWeightings",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "bytes",
        name: "_data",
        type: "bytes",
      },
      {
        internalType: "address",
        name: "_sender",
        type: "address",
      },
    ],
    name: "allocate",
    outputs: [],
    stateMutability: "payable",
    type: "function",
  },
  {
    inputs: [],
    name: "allocationEndTime",
    outputs: [
      {
        internalType: "uint64",
        name: "",
        type: "uint64",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "allocationStartTime",
    outputs: [
      {
        internalType: "uint64",
        name: "",
        type: "uint64",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "allocationSuperToken",
    outputs: [
      {
        internalType: "contract ISuperToken",
        name: "",
        type: "address",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address[]",
        name: "_recipientIds",
        type: "address[]",
      },
    ],
    name: "cancelRecipients",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [],
    name: "closeStream",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address[]",
        name: "_recipientIds",
        type: "address[]",
      },
      {
        internalType: "bytes",
        name: "_data",
        type: "bytes",
      },
      {
        internalType: "address",
        name: "_sender",
        type: "address",
      },
    ],
    name: "distribute",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [],
    name: "gdaPool",
    outputs: [
      {
        internalType: "contract ISuperfluidPool",
        name: "",
        type: "address",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "getAllo",
    outputs: [
      {
        internalType: "contract IAllo",
        name: "",
        type: "address",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address[]",
        name: "_recipientIds",
        type: "address[]",
      },
      {
        internalType: "bytes[]",
        name: "_data",
        type: "bytes[]",
      },
    ],
    name: "getPayouts",
    outputs: [
      {
        components: [
          {
            internalType: "address",
            name: "recipientAddress",
            type: "address",
          },
          {
            internalType: "uint256",
            name: "amount",
            type: "uint256",
          },
        ],
        internalType: "struct IStrategy.PayoutSummary[]",
        name: "",
        type: "tuple[]",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "getPoolAmount",
    outputs: [
      {
        internalType: "uint256",
        name: "",
        type: "uint256",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "getPoolId",
    outputs: [
      {
        internalType: "uint256",
        name: "",
        type: "uint256",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "_recipientId",
        type: "address",
      },
    ],
    name: "getRecipient",
    outputs: [
      {
        components: [
          {
            internalType: "bool",
            name: "useRegistryAnchor",
            type: "bool",
          },
          {
            internalType: "address",
            name: "recipientAddress",
            type: "address",
          },
          {
            internalType: "enum IStrategy.Status",
            name: "recipientStatus",
            type: "uint8",
          },
          {
            components: [
              {
                internalType: "uint256",
                name: "protocol",
                type: "uint256",
              },
              {
                internalType: "string",
                name: "pointer",
                type: "string",
              },
            ],
            internalType: "struct Metadata",
            name: "metadata",
            type: "tuple",
          },
          {
            internalType: "contract RecipientSuperApp",
            name: "superApp",
            type: "address",
          },
        ],
        internalType: "struct SQFSuperFluidStrategy.Recipient",
        name: "",
        type: "tuple",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "_superApp",
        type: "address",
      },
    ],
    name: "getRecipientId",
    outputs: [
      {
        internalType: "address",
        name: "",
        type: "address",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "_recipientId",
        type: "address",
      },
    ],
    name: "getRecipientStatus",
    outputs: [
      {
        internalType: "enum IStrategy.Status",
        name: "",
        type: "uint8",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "getStrategyId",
    outputs: [
      {
        internalType: "bytes32",
        name: "",
        type: "bytes32",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "_recipientId",
        type: "address",
      },
    ],
    name: "getSuperApp",
    outputs: [
      {
        internalType: "contract RecipientSuperApp",
        name: "",
        type: "address",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "uint256",
        name: "_amount",
        type: "uint256",
      },
    ],
    name: "increasePoolAmount",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [],
    name: "initialSuperAppBalance",
    outputs: [
      {
        internalType: "uint256",
        name: "",
        type: "uint256",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "uint256",
        name: "_poolId",
        type: "uint256",
      },
      {
        internalType: "bytes",
        name: "_data",
        type: "bytes",
      },
    ],
    name: "initialize",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [],
    name: "isPoolActive",
    outputs: [
      {
        internalType: "bool",
        name: "",
        type: "bool",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "_allocator",
        type: "address",
      },
    ],
    name: "isValidAllocator",
    outputs: [
      {
        internalType: "bool",
        name: "",
        type: "bool",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "metadataRequired",
    outputs: [
      {
        internalType: "bool",
        name: "",
        type: "bool",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "minPassportScore",
    outputs: [
      {
        internalType: "uint256",
        name: "",
        type: "uint256",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "passportDecoder",
    outputs: [
      {
        internalType: "contract IGitcoinPassportDecoder",
        name: "",
        type: "address",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "poolSuperToken",
    outputs: [
      {
        internalType: "contract ISuperToken",
        name: "",
        type: "address",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "",
        type: "address",
      },
    ],
    name: "recipientFlowRate",
    outputs: [
      {
        internalType: "uint256",
        name: "",
        type: "uint256",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "",
        type: "address",
      },
    ],
    name: "recipients",
    outputs: [
      {
        internalType: "bool",
        name: "useRegistryAnchor",
        type: "bool",
      },
      {
        internalType: "address",
        name: "recipientAddress",
        type: "address",
      },
      {
        internalType: "enum IStrategy.Status",
        name: "recipientStatus",
        type: "uint8",
      },
      {
        components: [
          {
            internalType: "uint256",
            name: "protocol",
            type: "uint256",
          },
          {
            internalType: "string",
            name: "pointer",
            type: "string",
          },
        ],
        internalType: "struct Metadata",
        name: "metadata",
        type: "tuple",
      },
      {
        internalType: "contract RecipientSuperApp",
        name: "superApp",
        type: "address",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "bytes",
        name: "_data",
        type: "bytes",
      },
      {
        internalType: "address",
        name: "_sender",
        type: "address",
      },
    ],
    name: "registerRecipient",
    outputs: [
      {
        internalType: "address",
        name: "recipientId",
        type: "address",
      },
    ],
    stateMutability: "payable",
    type: "function",
  },
  {
    inputs: [],
    name: "registrationEndTime",
    outputs: [
      {
        internalType: "uint64",
        name: "",
        type: "uint64",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "registrationStartTime",
    outputs: [
      {
        internalType: "uint64",
        name: "",
        type: "uint64",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address[]",
        name: "_recipientIds",
        type: "address[]",
      },
      {
        internalType: "enum IStrategy.Status[]",
        name: "_recipientStatuses",
        type: "uint8[]",
      },
    ],
    name: "reviewRecipients",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "",
        type: "address",
      },
    ],
    name: "superApps",
    outputs: [
      {
        internalType: "address",
        name: "",
        type: "address",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "superfluidHost",
    outputs: [
      {
        internalType: "address",
        name: "",
        type: "address",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "",
        type: "address",
      },
    ],
    name: "totalUnitsByRecipient",
    outputs: [
      {
        internalType: "uint256",
        name: "",
        type: "uint256",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "uint256",
        name: "_minPassportScore",
        type: "uint256",
      },
    ],
    name: "updateMinPassportScore",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "uint64",
        name: "_registrationStartTime",
        type: "uint64",
      },
      {
        internalType: "uint64",
        name: "_registrationEndTime",
        type: "uint64",
      },
      {
        internalType: "uint64",
        name: "_allocationStartTime",
        type: "uint64",
      },
      {
        internalType: "uint64",
        name: "_allocationEndTime",
        type: "uint64",
      },
    ],
    name: "updatePoolTimestamps",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [],
    name: "useRegistryAnchor",
    outputs: [
      {
        internalType: "bool",
        name: "",
        type: "bool",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "_token",
        type: "address",
      },
      {
        internalType: "uint256",
        name: "_amount",
        type: "uint256",
      },
    ],
    name: "withdraw",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
] as const;

export const bytecode =
  "0x60c06040523480156200001157600080fd5b5060405162006076380380620060768339810160408190526200003491620000bf565b6001600160a01b03821660805260405182908290620000589082906020016200019a565b60408051601f19818403018152919052805160209091012060a0525050600160035550620001cf9050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620000b65781810151838201526020016200009c565b50506000910152565b60008060408385031215620000d357600080fd5b82516001600160a01b0381168114620000eb57600080fd5b60208401519092506001600160401b03808211156200010957600080fd5b818501915085601f8301126200011e57600080fd5b81518181111562000133576200013362000083565b604051601f8201601f19908116603f011681019083821181831017156200015e576200015e62000083565b816040528281528860208487010111156200017857600080fd5b6200018b83602083016020880162000099565b80955050505050509250929050565b6020815260008251806020840152620001bb81604085016020870162000099565b601f01601f19169190910160400192915050565b60805160a051615e65620002116000396000610480015260008181610303015281816114d4015281816116400152818161187601526119a10152615e656000f3fe608060405260043610620002885760003560e01c80636ceed0ef1162000164578063d237884e11620000d6578063eb8203121162000095578063ef2920fc116200006c578063ef2920fc14620008b7578063f3fef3a314620008ce578063f5b0dfb714620008f357600080fd5b8063eb8203121462000835578063ed42489a146200086d578063edd146cc146200089257600080fd5b8063d237884e1462000775578063d2e17f591462000797578063df868ed314620007c0578063dff7d2c714620007d8578063eb11af93146200080157600080fd5b8063a0cf0aea1162000123578063a0cf0aea14620006a4578063b2b878d014620006ce578063b63b6fe41462000702578063c40c455d146200071a578063cb0e85a6146200075457600080fd5b80636ceed0ef14620006015780637f83598314620006235780639af5c09d14620006485780639c0b5f99146200066a5780639dad9382146200068c57600080fd5b80633c73567d11620001fe5780634d31d08711620001bd5780634d31d08714620004fe57806357089739146200053457806362812a39146200055057806363bbd79814620005845780636acd5bef14620005c157600080fd5b80633c73567d146200042657806340e270f3146200044b57806342fda9c714620004705780634533d67814620004a55780634ab4ba4214620004e757600080fd5b80632143e92f116200024b5780632143e92f146200038a5780632bbe0cae14620003af5780632c64ef3414620003c657806338fff2d014620003f75780633a1bce35146200040e57600080fd5b806302aed72e146200028d5780630a6f0ee914620002cc57806315cc481e14620002f35780631724c4ac146200032857806319ba46601462000368575b600080fd5b3480156200029a57600080fd5b50600754620002af906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b348015620002d957600080fd5b50620002f1620002eb3660046200320a565b62000918565b005b3480156200030057600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000620002af565b3480156200033557600080fd5b5062000359620003473660046200328a565b600f6020526000908152604090205481565b604051908152602001620002c3565b3480156200037557600080fd5b50600854620002af906001600160a01b031681565b3480156200039757600080fd5b50620002f1620003a9366004620032c7565b6200093e565b620002af620003c03660046200332c565b6200095f565b348015620003d357600080fd5b5062000359620003e53660046200328a565b60106020526000908152604090205481565b3480156200040457600080fd5b5060015462000359565b3480156200041b57600080fd5b5062000359600a5481565b3480156200043357600080fd5b50620002f162000445366004620033d1565b6200098a565b3480156200045857600080fd5b50620002f16200046a36600462003416565b62000b2f565b3480156200047d57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000062000359565b348015620004b257600080fd5b50600b54620004ce90600160c01b90046001600160401b031681565b6040516001600160401b039091168152602001620002c3565b348015620004f457600080fd5b5060025462000359565b3480156200050b57600080fd5b50620005236200051d3660046200328a565b62000d28565b6040519015158152602001620002c3565b3480156200054157600080fd5b50600c54620005239060ff1681565b3480156200055d57600080fd5b50620005756200056f3660046200328a565b62000d35565b604051620002c39190620034e7565b3480156200059157600080fd5b50620002af620005a33660046200328a565b6001600160a01b039081166000908152600e60205260409020541690565b348015620005ce57600080fd5b50620002af620005e03660046200328a565b6001600160a01b039081166000908152600d60205260409020600301541690565b3480156200060e57600080fd5b50600654620002af906001600160a01b031681565b3480156200063057600080fd5b50620002f16200064236600462003557565b62000d4a565b3480156200065557600080fd5b50600b54620004ce906001600160401b031681565b3480156200067757600080fd5b50600554620002af906001600160a01b031681565b3480156200069957600080fd5b50620002f1620010c3565b348015620006b157600080fd5b50620002af73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b348015620006db57600080fd5b50620006f3620006ed366004620035c9565b6200118e565b604051620002c39190620036ac565b3480156200070f57600080fd5b506200035960045481565b3480156200072757600080fd5b50620002af620007393660046200328a565b600e602052600090815260409020546001600160a01b031681565b3480156200076157600080fd5b50600c546200052390610100900460ff1681565b3480156200078257600080fd5b50600954620002af906001600160a01b031681565b348015620007a457600080fd5b50600b54620004ce90600160801b90046001600160401b031681565b348015620007cd57600080fd5b5062000523620012e3565b348015620007e557600080fd5b50600b54620004ce90600160401b90046001600160401b031681565b3480156200080e57600080fd5b5062000826620008203660046200328a565b620012f4565b604051620002c3919062003706565b3480156200084257600080fd5b506200085a620008543660046200328a565b62001301565b604051620002c395949392919062003716565b3480156200087a57600080fd5b50620002f16200088c36600462003767565b620013fa565b3480156200089f57600080fd5b50620002f1620008b136600462003781565b62001447565b620002f1620008c83660046200332c565b620017d2565b348015620008db57600080fd5b50620002f1620008ed366004620037cb565b620017f6565b3480156200090057600080fd5b50620002f16200091236600462003767565b6200183f565b620009226200186b565b6200092c620018b7565b62000939838383620018db565b505050565b336200094a8162001977565b620009588585858562001a2d565b5050505050565b60006200096b6200186b565b62000975620018b7565b62000981838362001ba5565b90505b92915050565b33620009968162001977565b620009a062001ea9565b8160005b8181101562000958576000858583818110620009c457620009c4620037fa565b9050602002016020810190620009db91906200328a565b6001600160a01b0381166000908152600d602052604081209192508154600160a81b900460ff16600681111562000a165762000a1662003439565b148062000a42575060068154600160a81b900460ff16600681111562000a405762000a4062003439565b145b1562000a715760405163f4a513b960e01b81526001600160a01b03831660048201526024015b60405180910390fd5b805460ff60a81b1916600360a91b1781556003810180546001600160a01b03198082169092556001600160a01b039081166000818152600e6020908152604080832080549096169095558684168252601090529283208390558354909262000ae29286926101009004169062001edc565b6040513381526001600160a01b038416907fd08928d04a8f87ca2e3a2a6d3367f3272b6ceae11f45c1aa86bed323469263019060200160405180910390a2836001019350505050620009a4565b336000908152600e60205260409020546001600160a01b03168062000b675760405163075fd2b160e01b815260040160405180910390fd5b6001600160a01b0381166000908152600f602052604081205462000b8e906103e862003826565b90508360000362000bd157600262000ba68462001fbe565b62000bb18362001fbe565b62000bbd919062003840565b62000bc9919062003953565b905062000c48565b8260000362000bfe57600262000be78562001fbe565b62000bf28362001fbe565b62000bbd919062003964565b600262000c0b8562001fbe565b62000c168562001fbe565b62000c218462001fbe565b62000c2d919062003840565b62000c39919062003964565b62000c45919062003953565b90505b62000c566103e8826200397a565b6001600160a01b038084166000908152600d6020526040902080549293509162000c899185916101009004168462001edc565b6001600160a01b0383166000908152600f6020908152604080832085905560109091529020548562000cbc868362003840565b62000cc8919062003964565b6001600160a01b038516600081815260106020526040908190209290925590517f35822de50167c622cbe7675e33a2f5cd6f10d628dec698b6401d2792486cec299062000d189086815260200190565b60405180910390a2505050505050565b600062000984826200204a565b62000d3f62002fdd565b6200098482620020dd565b3362000d568162001977565b62000d6062001ea9565b8382811462000d8257604051637fcce2a960e01b815260040160405180910390fd5b60005b81811015620010ba57600085858381811062000da55762000da5620037fa565b905060200201602081019062000dbc91906200399d565b9050600088888481811062000dd55762000dd5620037fa565b905060200201602081019062000dec91906200328a565b6001600160a01b0381166000908152600d6020526040902090915060018154600160a81b900460ff16600681111562000e295762000e2962003439565b14158062000e6d5750600283600681111562000e495762000e4962003439565b1415801562000e6d5750600383600681111562000e6a5762000e6a62003439565b14155b1562000e985760405163f4a513b960e01b81526001600160a01b038316600482015260240162000a68565b80548390829060ff60a81b1916600160a81b83600681111562000ebf5762000ebf62003439565b0217905550816001600160a01b03167f094d003df6c0153ac428d1a45e5827aa8e2aa00c6dbbc96a2dbb9a682115d837843360405162000f01929190620039c0565b60405180910390a2600283600681111562000f205762000f2062003439565b03620010ab5780546005546006546040516000936001600160a01b036101009091048116933093908216929116906001908190819062000f609062003028565b6001600160a01b039788168152958716602087015293861660408601529490911660608401521515608083015291151560a082015290151560c082015261010060e0820181905260009082015261012001604051809103906000f08015801562000fce573d6000803e3d6000fd5b506006546004805460405163a9059cbb60e01b81526001600160a01b03808616938201939093526024810191909152929350169063a9059cbb906044016020604051808303816000875af11580156200102b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010519190620039fc565b5081546200107190849061010090046001600160a01b0316600162001edc565b6001600160a01b039081166000818152600e6020526040902080549285166001600160a01b03199384161790556003830180549092161790555b83600101935050505062000d85565b50505050505050565b33620010cf8162001977565b600854604080518082019091526002815261060f60f31b60208201526007546200110e926001600160a01b039182169230929091169060009062002233565b506007546040516370a0823160e01b81523060048201526200118b916001600160a01b031690339082906370a0823190602401602060405180830381865afa1580156200115f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001185919062003a1a565b6200239b565b50565b81518151606091908114620011b657604051633da4c02b60e11b815260040160405180910390fd5b6000816001600160401b03811115620011d357620011d362003036565b6040519080825280602002602001820160405280156200121a57816020015b6040805180820190915260008082526020820152815260200190600190039081620011f25790505b50905060005b82811015620012da57620012b1868281518110620012425762001242620037fa565b60200260200101518683815181106200125f576200125f620037fa565b505060408051808201825260008082526020918201819052825180840184526001600160a01b03948516808352600d845284832054610100900490951681529381526010825291909120549082015290565b828281518110620012c657620012c6620037fa565b602090810291909101015260010162001220565b50949350505050565b6000620012ef620023da565b905090565b600062000984826200241f565b600d6020908152600091825260409182902080548351808501909452600182018054855260028301805460ff808516976001600160a01b0361010087041697600160a81b9096049091169594909392908401916200135f9062003a34565b80601f01602080910402602001604051908101604052809291908181526020018280546200138d9062003a34565b8015620013de5780601f10620013b257610100808354040283529160200191620013de565b820191906000526020600020905b815481529060010190602001808311620013c057829003601f168201915b505050919092525050506003909101546001600160a01b031685565b33620014068162001977565b600a829055604080518381523360208201527fdd18fbc43ebc7f26926b0335e04b16bf1a38cbd6eda46bf0e3cf4ef89b061628910160405180910390a15050565b6000818060200190518101906200145f919062003a8a565b90506200146c8362002436565b8051600c805460208085015161ffff1990921693151561ff00191693909317610100911515919091021790556060820151600580546001600160a01b0319166001600160a01b03928316179055610120830151600a5560408051635ab1bd5360e01b815290517f000000000000000000000000000000000000000000000000000000000000000090921692635ab1bd53926004808401938290030181865afa1580156200151d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001543919062003b6d565b600c805475ffffffffffffffffffffffffffffffffffffffff00001916620100006001600160a01b0393841602179055606082015116158062001591575060808101516001600160a01b0316155b80620015a8575060608101516001600160a01b0316155b80620015bf575060408101516001600160a01b0316155b15620015de5760405163538ba4f960e01b815260040160405180910390fd5b8061014001516000036200160557604051637fcce2a960e01b815260040160405180910390fd5b6080810151600680546001600160a01b0319166001600160a01b0392831617905560015460405163068bcd8d60e01b815260048101919091527f00000000000000000000000000000000000000000000000000000000000000009091169063068bcd8d90602401600060405180830381865afa1580156200168a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620016b4919081019062003c5b565b604090810151600780546001600160a01b0319166001600160a01b039283161790556006548251631dce337960e31b8152925191169163ee719bc89160048083019260209291908290030181865afa15801562001715573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200173b919062003b6d565b50610140810151600455604080820151600980546001600160a01b0319166001600160a01b03928316179055600754825180840190935260008352600160208401526200178d92911690309062002489565b600860006101000a8154816001600160a01b0302191690836001600160a01b03160217905550620009398160a001518260c001518360e0015184610100015162001a2d565b620017dc6200186b565b620017e6620018b7565b620017f2828262002531565b5050565b33620018028162001977565b6007546001600160a01b03908116908416036200183257604051637fcce2a960e01b815260040160405180910390fd5b620009398333846200239b565b620018496200186b565b80600260008282546200185d919062003840565b909155506200118b90508181565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614620018b55760405163075fd2b160e01b815260040160405180910390fd5b565b600154600003620018b557604051630f68fe6360e21b815260040160405180910390fd5b80620018e78162001977565b620018f1620026e0565b60008380602001905181019062001909919062003d2d565b6008546007549192506200192d916001600160a01b03908116913091168462002714565b50604051600b82900b81526001600160a01b038416907f9772934ae0adf1472a2378a77824461cb25bc02429d3b2403f4c492a4d1187eb9060200160405180910390a25050505050565b6001546040516329e40d4b60e01b815260048101919091526001600160a01b0382811660248301527f000000000000000000000000000000000000000000000000000000000000000016906329e40d4b90604401602060405180830381865afa158015620019e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a0f9190620039fc565b6200118b5760405163075fd2b160e01b815260040160405180910390fd5b836001600160401b031642118062001a565750826001600160401b0316846001600160401b0316115b8062001a735750816001600160401b0316846001600160401b0316115b8062001a905750806001600160401b0316826001600160401b0316115b8062001aad5750806001600160401b0316836001600160401b0316115b1562001acc57604051637fcce2a960e01b815260040160405180910390fd5b600b80546001600160401b03838116600160c01b90810277ffffffffffffffffffffffffffffffffffffffffffffffff878416600160801b908102919091166001600160801b038a8616600160401b9081026fffffffffffffffffffffffffffffffff199098168d88161797909717161791909117948590556040805186851681529486048416602086015290850483169084015290920490911660608201523360808201527fcb0fb7a7b87db2f472ee8977444cfdbc51993ce660aca27a5969a724fae6dcf39060a00160405180910390a150505050565b600062001bb162002737565b600080600062001bd4604051806040016040528060008152602001606081525090565b600c5460ff161562001c2d578680602001905181019062001bf6919062003d4b565b9196509450905062001c09858762002783565b62001c275760405163075fd2b160e01b815260040160405180910390fd5b62001ca0565b8680602001905181019062001c43919062003d4b565b9095509093506001600160a01b0384161515925090508162001c66578562001c68565b825b945081801562001c81575062001c7f858762002783565b155b1562001ca05760405163075fd2b160e01b815260040160405180910390fd5b600c54610100900460ff16801562001cc55750602081015151158062001cc557508051155b1562001ce45760405163c19e07c560e01b815260040160405180910390fd5b6001600160a01b03841662001d185760405163f4a513b960e01b81526001600160a01b038616600482015260240162000a68565b6001600160a01b038086166000908152600d6020908152604090912080549287166101000274ffffffffffffffffffffffffffffffffffffffff001990931692909217825582516001830190815590830151839190600284019062001d7e908262003e08565b5050600c5460ff16905062001d94578262001d97565b60015b815460ff19169015151780825560ff600160a81b90910416600081600681111562001dc65762001dc662003439565b0362001e2a57815460ff60a81b1916600160a81b1782556040516001600160a01b038816907fa197306e3dd5494a61a695381aa809a53b8e377a685e84e404a85d5a8da6cc629062001e1c908c908c9062003ed4565b60405180910390a262001e9d565b600181600681111562001e415762001e4162003439565b0362001e8457866001600160a01b03167faf5977db3aa7e6fc7d05e21c791ebd214afa76da27c8d8ddc8e4a9f742d7b2368a8a60405162001e1c92919062003ed4565b604051637fcce2a960e01b815260040160405180910390fd5b50505050505092915050565b600b54600160c01b90046001600160401b0316421115620018b55760405162b828c960e81b815260040160405180910390fd5b600854604051631b16777760e01b81526001600160a01b0384811660048301526001600160801b038416602483015290911690631b167777906044016020604051808303816000875af115801562001f38573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f5e9190620039fc565b506001600160a01b0383166000818152600f60209081526040918290206001600160801b0385169081905591519182527f35822de50167c622cbe7675e33a2f5cd6f10d628dec698b6401d2792486cec29910160405180910390a2505050565b70ffffffffffffffffffffffffffffffffff811160071b81811c68ffffffffffffffffff1060061b1781811c64ffffffffff1060051b1781811c62ffffff1060041b1781811c620100000160b5600192831c1b0260121c80830401811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b600954604051630d47875d60e41b81526001600160a01b038381166004830152600092839291169063d47875d090602401602060405180830381865afa15801562002099573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620020bf919062003a1a565b9050600a548110620020d45750600192915050565b50600092915050565b620020e762002fdd565b6001600160a01b038083166000908152600d6020908152604091829020825160a081018452815460ff80821615158352610100820490961693820193909352939092840191600160a81b900416600681111562002148576200214862003439565b60068111156200215c576200215c62003439565b815260200160018201604051806040016040529081600082015481526020016001820180546200218c9062003a34565b80601f0160208091040260200160405190810160405280929190818152602001828054620021ba9062003a34565b80156200220b5780601f10620021df576101008083540402835291602001916200220b565b820191906000526020600020905b815481529060010190602001808311620021ed57829003601f168201915b505050919092525050508152600391909101546001600160a01b031660209091015292915050565b6000806000620022438862002891565b91509150816001600160a01b03166339255d5b82836001600160a01b0316635a6c6dbc8c8c8c8c60006001600160401b0381111562002286576200228662003036565b6040519080825280601f01601f191660200182016040528015620022b1576020820181803683370190505b50604051602401620022c895949392919062003f01565b60408051808303601f1901815291815260208201805160e094851b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff909116179052519185901b7fffffffff000000000000000000000000000000000000000000000000000000001682526200234293925090899060040162003f4b565b6000604051808303816000875af115801562002362573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200238c919081019062003f8d565b50600198975050505050505050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03841601620023cd5762000939828262002a66565b6200093983838362002a83565b600b54600090426001600160401b03909116118015906200240d5750600b54600160401b90046001600160401b03164211155b15620024195750600190565b50600090565b60006200242c82620020dd565b6040015192915050565b620024406200186b565b60015415620024625760405163439a74c960e01b815260040160405180910390fd5b806000036200248457604051637fcce2a960e01b815260040160405180910390fd5b600155565b600080620024978562002891565b604051630779d36560e01b81526001600160a01b03888116600483015287811660248301528651151560448301526020870151151560648301529193509083169150630779d365906084016020604051808303816000875af115801562002502573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002528919062003b6d565b95945050505050565b6200253b62002ad3565b62002546816200204a565b620025645760405163075fd2b160e01b815260040160405180910390fd5b600080838060200190518101906200257d919062003fda565b6001600160a01b0382166000908152600d60205260409020919350915060028154600160a81b900460ff166006811115620025bc57620025bc62003439565b141580620025d5575060038101546001600160a01b0316155b15620026005760405163f4a513b960e01b81526001600160a01b038416600482015260240162000a68565b60038101546006546001600160a01b03918216916000918291620026279116888562002b24565b50509150915080600b0b600014806200263e575081155b1562002665576006546200265e906001600160a01b031688858862002bcb565b5062002681565b6006546200267f906001600160a01b031688858862002bee565b505b60065460408051600b88900b81526001600160a01b039283166020820152898316818301529051918816917f463ffc2cf8b1596445c417388ed30e53eb67cf6668cb2be7f0addf8a78c8441b9181900360600190a25050505050505050565b600b54600160401b90046001600160401b0316421015620018b5576040516317338e1560e31b815260040160405180910390fd5b604080516000808252602082019092526200252890869086908690869062002233565b600b54426001600160401b039091161180620027645750600b54600160401b90046001600160401b031642115b15620018b557604051635b04f6ad60e11b815260040160405180910390fd5b600c5460405163dd93da4360e01b81526001600160a01b0384811660048301526000928392620100009091049091169063dd93da4390602401600060405180830381865afa158015620027da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262002804919081019062004014565b600c548151604051635e8a791560e01b815260048101919091526001600160a01b0386811660248301529293506201000090910490911690635e8a791590604401602060405180830381865afa15801562002863573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620028899190620039fc565b949350505050565b7f65599bf746e17a00ea62e3610586992d88101b78eec3cf380706621fb97ea837547fc36f6c05164a669ecb6da53e218d77ae44d51cfc99f91e5a125a18de0949bee4546001600160a01b03811662002a2f576001600160a01b0382166200295b57826001600160a01b03166320bc44256040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002932573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002958919062003b6d565b91505b604051635b69006f60e11b81527fdfd8ece9bfbcb8c5c540edb935641f63d67686490a1ab97f000288759f30a94660048201526001600160a01b0383169063b6d200de90602401602060405180830381865afa158015620029c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029e6919062003b6d565b9050817f65599bf746e17a00ea62e3610586992d88101b78eec3cf380706621fb97ea83755807fc36f6c05164a669ecb6da53e218d77ae44d51cfc99f91e5a125a18de0949bee4555b6001600160a01b03821662002a485762002a48620040e9565b6001600160a01b03811662002a615762002a61620040e9565b915091565b60008060008084865af1620017f25763b12d13eb6000526004601cfd5b81601452806034526fa9059cbb00000000000000000000000060005260206000604460106000875af13d15600160005114171662002ac9576390b8ec186000526004601cfd5b6000603452505050565b600b5442600160801b9091046001600160401b0316118062002b065750600b54600160c01b90046001600160401b031642115b15620018b55760405162b828c960e81b815260040160405180910390fd5b600080600080600062002b378862002c11565b604051631cd43d1160e31b81526001600160a01b038b811660048301528a811660248301528981166044830152919350908316915063e6a1e88890606401608060405180830381865afa15801562002b93573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002bb99190620040ff565b929b919a509850909650945050505050565b604080516000808252602082019092526200252890869086908690869062002d81565b604080516000808252602082019092526200252890869086908690869062002dd4565b7f65599bf746e17a00ea62e3610586992d88101b78eec3cf380706621fb97ea837547fb969d79d88acd02d04ed7ee7d43b949e7daf093d363abcfbbc43dfdfd1ce969a546001600160a01b03811662002a2f576001600160a01b03821662002cdb57826001600160a01b03166320bc44256040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002cb2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002cd8919062003b6d565b91505b604051635b69006f60e11b81527fa9214cc96615e0085d3bb077758db69497dc2dce3b2b1e97bc93c3d18d83efd360048201526001600160a01b0383169063b6d200de90602401602060405180830381865afa15801562002d40573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002d66919062003b6d565b90506001600160a01b03821662002a485762002a48620040e9565b600080600062002d918862002e27565b91509150816001600160a01b03166339255d5b82836001600160a01b03166394229ecb8c8c8c8c60006001600160401b0381111562002286576200228662003036565b600080600062002de48862002e27565b91509150816001600160a01b03166339255d5b82836001600160a01b031663354b95908c8c8c8c60006001600160401b0381111562002286576200228662003036565b7f65599bf746e17a00ea62e3610586992d88101b78eec3cf380706621fb97ea837547fb969d79d88acd02d04ed7ee7d43b949e7daf093d363abcfbbc43dfdfd1ce969a546001600160a01b03811662002a2f576001600160a01b03821662002ef157826001600160a01b03166320bc44256040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002ec8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002eee919062003b6d565b91505b604051635b69006f60e11b81527fa9214cc96615e0085d3bb077758db69497dc2dce3b2b1e97bc93c3d18d83efd360048201526001600160a01b0383169063b6d200de90602401602060405180830381865afa15801562002f56573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002f7c919062003b6d565b9050817f65599bf746e17a00ea62e3610586992d88101b78eec3cf380706621fb97ea83755807fb969d79d88acd02d04ed7ee7d43b949e7daf093d363abcfbbc43dfdfd1ce969a556001600160a01b03821662002a485762002a48620040e9565b6040805160a081018252600080825260208201819052909182019081526020016200301b604051806040016040528060008152602001606081525090565b8152600060209091015290565b611cf1806200413f83390190565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b038111828210171562003072576200307262003036565b60405290565b60405160c081016001600160401b038111828210171562003072576200307262003036565b604051601f8201601f191681016001600160401b0381118282101715620030c857620030c862003036565b604052919050565b60006001600160401b03821115620030ec57620030ec62003036565b5060051b60200190565b6001600160a01b03811681146200118b57600080fd5b600082601f8301126200311e57600080fd5b81356020620031376200313183620030d0565b6200309d565b82815260059290921b840181019181810190868411156200315757600080fd5b8286015b848110156200317f5780356200317181620030f6565b83529183019183016200315b565b509695505050505050565b60006001600160401b03821115620031a657620031a662003036565b50601f01601f191660200190565b600082601f830112620031c657600080fd5b8135620031d762003131826200318a565b818152846020838601011115620031ed57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000606084860312156200322057600080fd5b83356001600160401b03808211156200323857600080fd5b62003246878388016200310c565b945060208601359150808211156200325d57600080fd5b506200326c86828701620031b4565b92505060408401356200327f81620030f6565b809150509250925092565b6000602082840312156200329d57600080fd5b8135620032aa81620030f6565b9392505050565b6001600160401b03811681146200118b57600080fd5b60008060008060808587031215620032de57600080fd5b8435620032eb81620032b1565b93506020850135620032fd81620032b1565b925060408501356200330f81620032b1565b915060608501356200332181620032b1565b939692955090935050565b600080604083850312156200334057600080fd5b82356001600160401b038111156200335757600080fd5b6200336585828601620031b4565b92505060208301356200337881620030f6565b809150509250929050565b60008083601f8401126200339657600080fd5b5081356001600160401b03811115620033ae57600080fd5b6020830191508360208260051b8501011115620033ca57600080fd5b9250929050565b60008060208385031215620033e557600080fd5b82356001600160401b03811115620033fc57600080fd5b6200340a8582860162003383565b90969095509350505050565b600080604083850312156200342a57600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b600781106200346e57634e487b7160e01b600052602160045260246000fd5b9052565b60005b838110156200348f57818101518382015260200162003475565b50506000910152565b60008151808452620034b281602086016020860162003472565b601f01601f19169290920160200192915050565b80518252600060208201516040602085015262002889604085018262003498565b60208152815115156020820152600060208301516001600160a01b038082166040850152604085015191506200352160608501836200344f565b6060850151915060a060808501526200353e60c0850183620034c6565b91508060808601511660a0850152508091505092915050565b600080600080604085870312156200356e57600080fd5b84356001600160401b03808211156200358657600080fd5b620035948883890162003383565b90965094506020870135915080821115620035ae57600080fd5b50620035bd8782880162003383565b95989497509550505050565b60008060408385031215620035dd57600080fd5b82356001600160401b0380821115620035f557600080fd5b62003603868387016200310c565b93506020915081850135818111156200361b57600080fd5b8501601f810187136200362d57600080fd5b80356200363e6200313182620030d0565b81815260059190911b820184019084810190898311156200365e57600080fd5b8584015b838110156200369b578035868111156200367c5760008081fd5b6200368c8c8983890101620031b4565b84525091860191860162003662565b508096505050505050509250929050565b602080825282518282018190526000919060409081850190868401855b82811015620036f957815180516001600160a01b03168552860151868501529284019290850190600101620036c9565b5091979650505050505050565b602081016200098482846200344f565b851515815260006001600160a01b0380871660208401526200373c60408401876200344f565b60a060608401526200375260a0840186620034c6565b91508084166080840152509695505050505050565b6000602082840312156200377a57600080fd5b5035919050565b600080604083850312156200379557600080fd5b8235915060208301356001600160401b03811115620037b357600080fd5b620037c185828601620031b4565b9150509250929050565b60008060408385031215620037df57600080fd5b8235620037ec81620030f6565b946020939093013593505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000984576200098462003810565b8082018082111562000984576200098462003810565b600181815b80851115620038975781600019048211156200387b576200387b62003810565b808516156200388957918102915b93841c93908002906200385b565b509250929050565b600082620038b05750600162000984565b81620038bf5750600062000984565b8160018114620038d85760028114620038e35762003903565b600191505062000984565b60ff841115620038f757620038f762003810565b50506001821b62000984565b5060208310610133831016604e8410600b841016171562003928575081810a62000984565b62003934838362003856565b80600019048211156200394b576200394b62003810565b029392505050565b6000620032aa60ff8416836200389f565b8181038181111562000984576200098462003810565b6000826200399857634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620039b057600080fd5b813560078110620032aa57600080fd5b60408101620039d082856200344f565b6001600160a01b03831660208301529392505050565b80518015158114620039f757600080fd5b919050565b60006020828403121562003a0f57600080fd5b620032aa82620039e6565b60006020828403121562003a2d57600080fd5b5051919050565b600181811c9082168062003a4957607f821691505b60208210810362003a6a57634e487b7160e01b600052602260045260246000fd5b50919050565b8051620039f781620030f6565b8051620039f781620032b1565b6000610160828403121562003a9e57600080fd5b62003aa86200304c565b62003ab383620039e6565b815262003ac360208401620039e6565b602082015262003ad66040840162003a70565b604082015262003ae96060840162003a70565b606082015262003afc6080840162003a70565b608082015262003b0f60a0840162003a7d565b60a082015262003b2260c0840162003a7d565b60c082015262003b3560e0840162003a7d565b60e082015261010062003b4a81850162003a7d565b908201526101208381015190820152610140928301519281019290925250919050565b60006020828403121562003b8057600080fd5b8151620032aa81620030f6565b600062003b9e62003131846200318a565b905082815283838301111562003bb357600080fd5b620032aa83602083018462003472565b600082601f83011262003bd557600080fd5b620032aa8383516020850162003b8d565b60006040828403121562003bf957600080fd5b604051604081016001600160401b03828210818311171562003c1f5762003c1f62003036565b8160405282935084518352602085015191508082111562003c3f57600080fd5b5062003c4e8582860162003bc3565b6020830152505092915050565b60006020828403121562003c6e57600080fd5b81516001600160401b038082111562003c8657600080fd5b9083019060c0828603121562003c9b57600080fd5b62003ca562003078565b82518152602083015162003cb981620030f6565b6020820152604083015162003cce81620030f6565b604082015260608301518281111562003ce657600080fd5b62003cf48782860162003be6565b6060830152506080830151608082015260a083015160a082015280935050505092915050565b8051600b81900b8114620039f757600080fd5b60006020828403121562003d4057600080fd5b620032aa8262003d1a565b60008060006060848603121562003d6157600080fd5b835162003d6e81620030f6565b602085015190935062003d8181620030f6565b60408501519092506001600160401b0381111562003d9e57600080fd5b62003dac8682870162003be6565b9150509250925092565b601f8211156200093957600081815260208120601f850160051c8101602086101562003ddf5750805b601f850160051c820191505b8181101562003e005782815560010162003deb565b505050505050565b81516001600160401b0381111562003e245762003e2462003036565b62003e3c8162003e35845462003a34565b8462003db6565b602080601f83116001811462003e74576000841562003e5b5750858301515b600019600386901b1c1916600185901b17855562003e00565b600085815260208120601f198616915b8281101562003ea55788860151825594840194600190910190840162003e84565b508582101562003ec45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60408152600062003ee9604083018562003498565b90506001600160a01b03831660208301529392505050565b60006001600160a01b038088168352808716602084015280861660408401525083600b0b606083015260a0608083015262003f4060a083018462003498565b979650505050505050565b6001600160a01b038416815260606020820152600062003f6f606083018562003498565b828103604084015262003f83818562003498565b9695505050505050565b60006020828403121562003fa057600080fd5b81516001600160401b0381111562003fb757600080fd5b8201601f8101841362003fc957600080fd5b620028898482516020840162003b8d565b6000806040838503121562003fee57600080fd5b825162003ffb81620030f6565b91506200400b6020840162003d1a565b90509250929050565b6000602082840312156200402757600080fd5b81516001600160401b03808211156200403f57600080fd5b9083019060c082860312156200405457600080fd5b6200405e62003078565b82518152602083015160208201526040830151828111156200407f57600080fd5b6200408d8782860162003bc3565b604083015250606083015182811115620040a657600080fd5b620040b48782860162003be6565b606083015250620040c86080840162003a70565b6080820152620040db60a0840162003a70565b60a082015295945050505050565b634e487b7160e01b600052600160045260246000fd5b600080600080608085870312156200411657600080fd5b84519350620041286020860162003d1a565b604086015160609096015194979096509250505056fe60e06040523480156200001157600080fd5b5060405162001cf138038062001cf18339810160408190526200003491620001a2565b6001600160a01b038616608052640100000001846200005557640200000000175b836200006357640c00000000175b826200007157643000000000175b6080516001600160a01b031663bd1c448b82846040518363ffffffff1660e01b8152600401620000a3929190620002eb565b600060405180830381600087803b158015620000be57600080fd5b505af1158015620000d3573d6000803e3d6000fd5b5050506001600160a01b0389169050620001005760405163538ba4f960e01b815260040160405180910390fd5b505050506001600160a01b0393841660a05250821660c05250600080546001600160a01b0319169290911691909117905562000327565b6001600160a01b03811681146200014d57600080fd5b50565b805180151581146200016157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001995781810151838201526020016200017f565b50506000910152565b600080600080600080600080610100898b031215620001c057600080fd5b8851620001cd8162000137565b60208a0151909850620001e08162000137565b60408a0151909750620001f38162000137565b60608a0151909650620002068162000137565b94506200021660808a0162000150565b93506200022660a08a0162000150565b92506200023660c08a0162000150565b60e08a01519092506001600160401b03808211156200025457600080fd5b818b0191508b601f8301126200026957600080fd5b8151818111156200027e576200027e62000166565b604051601f8201601f19908116603f01168101908382118183101715620002a957620002a962000166565b816040528281528e6020848701011115620002c357600080fd5b620002d68360208301602088016200017c565b80955050505050509295985092959890939650565b8281526040602082015260008251806040840152620003128160608501602087016200017c565b601f01601f1916919091016060019392505050565b60805160a05160c05161192a620003c760003960008181610125015281816101cf015281816103ce015281816104b701528181610644015281816108ed01528181610b9d01528181610bd901528181610c2f01528181610c7d0152610cb801526000818161024401528181610826015261096b015260008181610164015281816103930152818161047c0152818161060401526106ca015261192a6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c806366d003ac1161008c5780638c7f0959116100665780638c7f095914610222578063a8c62e761461023f578063bcb4546f14610266578063d86ed3e51461029b57600080fd5b806366d003ac146101ac57806372ca8a3e146101bf578063884d1f401461020f57600080fd5b806349f289dc116100bd57806349f289dc1461015f57806353c11f99146101865780635f9e7d771461019957600080fd5b8063230dbd29146100e457806330d9c9151461010d578063451c3d8014610120575b600080fd5b6100f76100f23660046113e8565b6102ae565b6040516101049190611503565b60405180910390f35b6100f761011b36600461151d565b610361565b6101477f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610104565b6101477f000000000000000000000000000000000000000000000000000000000000000081565b6100f76101943660046113e8565b610386565b6100f76101a736600461151d565b61046f565b600054610147906001600160a01b031681565b6101ff6101cd3660046115bc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b6040519015158152602001610104565b6100f761021d36600461151d565b610521565b61022a600081565b60405163ffffffff9091168152602001610104565b6101477f000000000000000000000000000000000000000000000000000000000000000081565b61028d7fa9214cc96615e0085d3bb077758db69497dc2dce3b2b1e97bc93c3d18d83efd381565b604051908152602001610104565b6100f76102a93660046113e8565b610558565b60606102b98a6105f9565b6102c289610692565b6103055782828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092935061035492505050565b6000610313878901896115d9565b509050600061032486880188611621565b509050600061033d6001600160a01b038e168430610758565b505091505061034e828288886107fa565b93505050505b9998505050505050505050565b604080518082019091526002815261060f60f31b60208201525b979650505050505050565b6060336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415806103c657506103c489610692565b155b806103fe57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116908b1614155b156104425782828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092935061035492505050565b600061045085870187611621565b50905061046081600086866107fa565b9b9a5050505050505050505050565b6060336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415806104af57506104ad87610692565b155b806104e757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811690891614155b1561050b5750604080518082019091526002815261060f60f31b602082015261037b565b61051585856108ca565b98975050505050505050565b606061052c886105f9565b61053587610692565b61050b5750604080518082019091526002815261060f60f31b602082015261037b565b60606105638a6105f9565b61056c89610692565b6105af5782828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092935061035492505050565b60006105bd878901896115d9565b50905060006105d66001600160a01b038d168330610758565b50509150506105e9600082848888610949565b9c9b505050505050505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461064257604051632f2d36a760e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169082161461068f57604051631ea25bab60e31b815260040160405180910390fd5b50565b604051635b69006f60e11b81527fa9214cc96615e0085d3bb077758db69497dc2dce3b2b1e97bc93c3d18d83efd360048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b6d200de90602401602060405180830381865afa158015610719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073d919061164d565b6001600160a01b0316826001600160a01b0316149050919050565b600080600080600061076988610a0b565b604051631cd43d1160e31b81526001600160a01b038b811660048301528a811660248301528981166044830152919350908316915063e6a1e88890606401608060405180830381865afa1580156107c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e8919061166a565b929b919a509850909650945050505050565b6040516340e270f360e01b8152600b85810b600483015284900b60248201526060906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906340e270f390604401600060405180830381600087803b15801561086a57600080fd5b505af115801561087e573d6000803e3d6000fd5b505050506108c183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b8d92505050565b95945050505050565b606060006108da838501856115d9565b5090506000806109146001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168430610758565b505060408051600b9290920b602083015281810192909252815180820383018152606090910190915293505050505b92915050565b604051634d31d08760e01b81526001600160a01b0384811660048301526060917f000000000000000000000000000000000000000000000000000000000000000090911690634d31d08790602401602060405180830381865afa1580156109b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d891906116a8565b6109f55760405163075fd2b160e01b815260040160405180910390fd5b610a01868685856107fa565b9695505050505050565b7f65599bf746e17a00ea62e3610586992d88101b78eec3cf380706621fb97ea837547fb969d79d88acd02d04ed7ee7d43b949e7daf093d363abcfbbc43dfdfd1ce969a546001600160a01b038116610b5c576001600160a01b038216610ad057826001600160a01b03166320bc44256040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acd919061164d565b91505b604051635b69006f60e11b81527fa9214cc96615e0085d3bb077758db69497dc2dce3b2b1e97bc93c3d18d83efd360048201526001600160a01b0383169063b6d200de906024015b602060405180830381865afa158015610b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b59919061164d565b90505b6001600160a01b038216610b7257610b726116ca565b6001600160a01b038116610b8857610b886116ca565b915091565b806000610bc36001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630610ced565b6000805491925090610c03906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691309116610e05565b90506000610c1182846116e0565b905080600b0b600003610c6157600054610c5a906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169130911688610e9d565b9350610ce5565b81600b0b600014610ca757600054610c5a906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691168388610ff4565b600054610ce2906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691168388611080565b93505b505050919050565b600080610cf984610a0b565b9150506000610d07856110ce565b60405163e8e7e2d160e01b81526001600160a01b0388811660048301528781166024830152919350600092509084169063e8e7e2d190604401602060405180830381865afa158015610d5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d819190611725565b60405163e8e7e2d160e01b81526001600160a01b038881166004830152878116602483015291925060009184169063e8e7e2d190604401602060405180830381865afa158015610dd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df99190611725565b905061037b81836116e0565b600080610e1185610a0b565b604051631cd43d1160e31b81526001600160a01b03888116600483015287811660248301528681166044830152919350908316915063e6a1e88890606401608060405180830381865afa158015610e6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e90919061166a565b5090979650505050505050565b6060600080610eab876111df565b91509150816001600160a01b0316634329d29382836001600160a01b031663b4b333c68b8b8b600067ffffffffffffffff811115610eeb57610eeb611742565b6040519080825280601f01601f191660200182016040528015610f15576020820181803683370190505b50604051602401610f299493929190611758565b60408051808303601f1901815291815260208201805160e094851b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff909116179052519185901b7fffffffff00000000000000000000000000000000000000000000000000000000168252610fa193925090899060040161178c565b6000604051808303816000875af1158015610fc0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fe8919081019061185b565b50979650505050505050565b6060600080611002876111df565b91509150816001600160a01b0316634329d29382836001600160a01b03166350209a628b8b8b600067ffffffffffffffff81111561104257611042611742565b6040519080825280601f01601f19166020018201604052801561106c576020820181803683370190505b50604051602401610f2994939291906118bf565b606060008061108e876111df565b91509150816001600160a01b0316634329d29382836001600160a01b03166362fc305e8b8b8b600067ffffffffffffffff81111561104257611042611742565b7f65599bf746e17a00ea62e3610586992d88101b78eec3cf380706621fb97ea837547fc36f6c05164a669ecb6da53e218d77ae44d51cfc99f91e5a125a18de0949bee4546001600160a01b038116610b5c576001600160a01b03821661119357826001600160a01b03166320bc44256040518163ffffffff1660e01b8152600401602060405180830381865afa15801561116c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611190919061164d565b91505b604051635b69006f60e11b81527fdfd8ece9bfbcb8c5c540edb935641f63d67686490a1ab97f000288759f30a94660048201526001600160a01b0383169063b6d200de90602401610b18565b7f65599bf746e17a00ea62e3610586992d88101b78eec3cf380706621fb97ea837547fb969d79d88acd02d04ed7ee7d43b949e7daf093d363abcfbbc43dfdfd1ce969a546001600160a01b038116610b5c576001600160a01b0382166112a457826001600160a01b03166320bc44256040518163ffffffff1660e01b8152600401602060405180830381865afa15801561127d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a1919061164d565b91505b604051635b69006f60e11b81527fa9214cc96615e0085d3bb077758db69497dc2dce3b2b1e97bc93c3d18d83efd360048201526001600160a01b0383169063b6d200de90602401602060405180830381865afa158015611308573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132c919061164d565b9050817f65599bf746e17a00ea62e3610586992d88101b78eec3cf380706621fb97ea83755807fb969d79d88acd02d04ed7ee7d43b949e7daf093d363abcfbbc43dfdfd1ce969a556001600160a01b038216610b7257610b726116ca565b6001600160a01b038116811461068f57600080fd5b60008083601f8401126113b157600080fd5b50813567ffffffffffffffff8111156113c957600080fd5b6020830191508360208285010111156113e157600080fd5b9250929050565b600080600080600080600080600060c08a8c03121561140657600080fd5b89356114118161138a565b985060208a01356114218161138a565b975060408a0135965060608a013567ffffffffffffffff8082111561144557600080fd5b6114518d838e0161139f565b909850965060808c013591508082111561146a57600080fd5b6114768d838e0161139f565b909650945060a08c013591508082111561148f57600080fd5b5061149c8c828d0161139f565b915080935050809150509295985092959850929598565b60005b838110156114ce5781810151838201526020016114b6565b50506000910152565b600081518084526114ef8160208601602086016114b3565b601f01601f19169290920160200192915050565b60208152600061151660208301846114d7565b9392505050565b600080600080600080600060a0888a03121561153857600080fd5b87356115438161138a565b965060208801356115538161138a565b955060408801359450606088013567ffffffffffffffff8082111561157757600080fd5b6115838b838c0161139f565b909650945060808a013591508082111561159c57600080fd5b506115a98a828b0161139f565b989b979a50959850939692959293505050565b6000602082840312156115ce57600080fd5b81356115168161138a565b600080604083850312156115ec57600080fd5b82356115f78161138a565b915060208301356116078161138a565b809150509250929050565b80600b0b811461068f57600080fd5b6000806040838503121561163457600080fd5b823561163f81611612565b946020939093013593505050565b60006020828403121561165f57600080fd5b81516115168161138a565b6000806000806080858703121561168057600080fd5b84519350602085015161169281611612565b6040860151606090960151949790965092505050565b6000602082840312156116ba57600080fd5b8151801515811461151657600080fd5b634e487b7160e01b600052600160045260246000fd5b600b81810b9083900b016b7fffffffffffffffffffffff81136b7fffffffffffffffffffffff198212171561094357634e487b7160e01b600052601160045260246000fd5b60006020828403121561173757600080fd5b815161151681611612565b634e487b7160e01b600052604160045260246000fd5b60006001600160a01b038087168352808616602084015280851660408401525060806060830152610a0160808301846114d7565b6001600160a01b03841681526080602082015260006117ae60808301856114d7565b8281038060408501526002825261060f60f31b602083015260408101606085015250610a0160408201856114d7565b600082601f8301126117ee57600080fd5b815167ffffffffffffffff8082111561180957611809611742565b604051601f8301601f19908116603f0116810190828211818310171561183157611831611742565b8160405283815286602085880101111561184a57600080fd5b610a018460208301602089016114b3565b6000806040838503121561186e57600080fd5b825167ffffffffffffffff8082111561188657600080fd5b611892868387016117dd565b935060208501519150808211156118a857600080fd5b506118b5858286016117dd565b9150509250929050565b60006001600160a01b03808716835280861660208401525083600b0b604083015260806060830152610a0160808301846114d756fea2646970667358221220e722987646373118706b28a30e88b34fa642c8f1e3c2f6cac4dc95106222d86764736f6c63430008130033a2646970667358221220d5f332406b77db88987be407c0dbdb1fed2c3348d46512ad486fc081850e6f4764736f6c63430008130033";
