//SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;

import "erc721a/contracts/ERC721A.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract TTCAirdropper is Ownable {

  error ArrayMismatch();

  function airdrop(address[] calldata _addresses, uint256[] calldata _tokenIds) external onlyOwner {
    if (_addresses.length != _tokenIds.length) revert ArrayMismatch();

    ERC721A ttcContract = ERC721A(0xECCAE88FF31e9f823f25bEb404cbF2110e81F1FA);

    uint256 addressLength = _addresses.length;
    for (uint256 i; i < addressLength;) {
      ttcContract.safeTransferFrom(msg.sender, _addresses[i], _tokenIds[i]);

      unchecked { ++i; }
    }
  }

}
[{"inputs":[],"name":"ArrayMismatch","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]