diff --git a/DMS/dinov2_clip_gated/README.md b/DMS/dinov2_clip_gated/README.md new file mode 100644 index 0000000000000000000000000000000000000000..14c71a3219dd7526fa56b471f4ba76c50aac1978 --- /dev/null +++ b/DMS/dinov2_clip_gated/README.md @@ -0,0 +1,52 @@ +# DINOv2-CLIP + Gated Multimodal Unit on Apple Dense Material Segmentation + +A material-classification **fusion head** from SegObjectMaterial. It classifies the +material of a masked object from two frozen embeddings: + +| | | +|---|---| +| vision | DINOv2 ViT-B/14 (CLS token, frozen) -> 768-d | +| language | CLIP ViT-L/14 text encoder over Qwen2.5-VL-7B captions (frozen) -> 768-d | +| head | Gated Multimodal Unit (`gated`, defaults), 1,722,937 parameters | +| classes | 57 (Apple Dense Material Segmentation) | + +**This repo holds only the head.** Features must come from the same encoders, +captioner and prompts as training (see the SegObjectMaterial repository); the +encoders are downloaded from their own model pages under their own licenses. + +## Evaluation + +Held-out split recorded in `split.json` (source images never seen in training). +Single training run -- differences under ~0.5 mIoU points between heads are within +run-to-run noise. + +| mIoU | mAcc | eval samples | +|---|---|---| +| 0.4543 | 0.6373 | 186,231 | + +## Training + +```json +{ + "learning_rate": 5e-05, + "epochs": 50, + "batch_size": 32, + "weight_decay": 0.0001, + "lr_schedule": "constant", + "early_stopping_patience": 0, + "checkpoint": "best validation loss" +} +``` + +## Use + +```python +from utils.hub import load_head_from_hub # SegObjectMaterial repository +head, info = load_head_from_hub("s0um0r0y/SegObjectMaterial", "DMS/dinov2_clip_gated") +logits = head(vision_features, language_features) # [B, 768], [B, 768] +``` + +## Integrity + +- `model.safetensors` sha256 `0715e31f97766d6da1185b402bf47e44a44db6f0bcb24f7e9cb743b30232200c` +- source config `config/config_dinov2_clip.toml`, code commit `1a8130c922267fb0786a33e3854a7e00763cc38f+dirty` diff --git a/DMS/dinov2_clip_gated/config.toml b/DMS/dinov2_clip_gated/config.toml new file mode 100644 index 0000000000000000000000000000000000000000..fb54d0074bdbb588318467f6989f198d663c3855 --- /dev/null +++ b/DMS/dinov2_clip_gated/config.toml @@ -0,0 +1,62 @@ +# Apple DMS -- BASE pipeline: DINOv2 ViT-B/14 (768) + Qwen2.5-VL -> CLIP text (768) +# +# Pair this with: +# src/vision_stream.py + src/language_stream.py +# run_serialization.py -> train.py (the raw/original scripts) +# +# config/config.toml is the OTHER pipeline (DINOv3 ViT-L/16 1024 + SigLIP2), +# driven by run_serialization_latest_models.py -> train_latest_models.py. +# Mixing them raises the dimension-mismatch ValueError in the fusion head. + +[data] +dataset_type = "apple_dms" +image_dir = "/images" +mask_dir = "/labels" +# Rebuilt automatically on first run; the index now stores one entry per +# CONNECTED COMPONENT, so any pre-existing labels.json must be removed first. +labels_file = "/labels_instances.json" +# Fresh directory: features are now object-grounded (bbox-cropped vision, +# bbox-prompted captions), so the old tensor_cache_dir/ contents are stale. +tensor_cache_dir = "/tensor_cache_dir_grounded" + +# Connected-component filtering (measured on 400 real DMS masks): +# keeping every component gives 7.5x more samples than the old per-(image,class) +# scheme -- 2.45M samples / 47 GB / ~7.5x the VLM captioning time -- because 69% +# of components are under 0.1% of the frame and crop to a few pixels. +# A component is kept when area >= max(min_instance_area, min_instance_frac * frame). +min_instance_area = 1000 # absolute pixel floor +min_instance_frac = 0.001 # and at least 0.1% of the frame +max_instances_per_class = 0 # 0 = keep all; set e.g. 3 to cap the long tail + + +[model] +# fusion head, read by train_latest_models.py. This config always trained "gated" +# (the default when the key was absent) -- best_model_dinov2_clip.pth / best_model_fmd.pth +# are gated heads. config_dinov2_clip_mlp.toml / fmd_config_dinov2_clip_mlp.toml hold the MLP. +fusion = "gated" +vision_dim = 768 # DINOv2 ViT-B/14 CLS token +language_dim = 768 # CLIP ViT-L/14 text pooler_output +num_classes = 57 + +[training] +batch_size = 32 + +# Batch size for the OFFLINE SERIALIZATION pass, which is a completely different +# memory regime from training: it pushes full-resolution images through the 7B +# VLM, whereas [training].batch_size only moves cached 768-d vectors through a +# small MLP. Measured on the 23.6 GiB 4090 -- static weights 16.2 GiB, so only +# ~7.4 GiB is left: batch 8 peaks at 17.7 GiB, 16 at 19.2 GiB, and 32 OOMs. +# 8 leaves headroom for a labmate's job to coexist; raise to 16 on a free card. +serialization_batch_size = 8 +learning_rate = 5e-5 +epochs = 50 +train_ratio = 0.8 # 80% for training +val_ratio = 0.2 # 20% for validation +tensorboard_log_dir = "/dms_dinov2_clip" + +[inference] +checkpoint_path = "/best_model_dinov2_clip.pth" + +[logging] +wandb_project = "material-classification" +wandb_run_name = "dms-dinov2-clip-grounded" diff --git a/DMS/dinov2_clip_gated/head.json b/DMS/dinov2_clip_gated/head.json new file mode 100644 index 0000000000000000000000000000000000000000..5a66687ea0bbe9d70badde621dcb0f99571ae145 --- /dev/null +++ b/DMS/dinov2_clip_gated/head.json @@ -0,0 +1,99 @@ +{ + "fusion": "gated", + "head": "Gated Multimodal Unit", + "head_kwargs": {}, + "vision_dim": 768, + "language_dim": 768, + "num_classes": 57, + "classes": [ + "No label", + "Animal skin", + "Bone/teeth/horn", + "Brickwork", + "Cardboard", + "Carpet/rug", + "Ceiling tile", + "Ceramic", + "Chalkboard/blackboard", + "Clutter", + "Concrete", + "Cork/corkboard", + "Engineered stone", + "Fabric/cloth", + "Fiberglass wool", + "Fire", + "Foliage", + "Food", + "Fur", + "Gemstone/quartz", + "Glass", + "Hair", + "I cannot tell", + "Ice", + "Leather", + "Liquid, non-water", + "Metal", + "Mirror", + "Not on list", + "Paint/plaster/enamel", + "Paper", + "Pearl", + "Photograph/painting", + "Plastic, clear", + "Plastic, non-clear", + "Rubber/latex", + "Sand", + "Skin/lips", + "Sky", + "Snow", + "Soap", + "Soil/mud", + "Sponge", + "Stone, natural", + "Stone, polished", + "Styrofoam", + "Tile", + "Wallpaper", + "Water", + "Wax", + "Whiteboard", + "Wicker", + "Wood", + "Wood, tree", + "Bad polygon", + "Multiple materials", + "Asphalt" + ], + "dataset": "Apple Dense Material Segmentation", + "dataset_key": "DMS", + "encoders": { + "vision": "DINOv2 ViT-B/14 (CLS token, frozen)", + "language": "CLIP ViT-L/14 text encoder over Qwen2.5-VL-7B captions (frozen)", + "short": "DINOv2-CLIP", + "slug": "dinov2_clip" + }, + "parameters": 1722937, + "training": { + "learning_rate": 5e-05, + "epochs": 50, + "batch_size": 32, + "weight_decay": 0.0001, + "lr_schedule": "constant", + "early_stopping_patience": 0, + "checkpoint": "best validation loss" + }, + "sha256": { + "safetensors": "0715e31f97766d6da1185b402bf47e44a44db6f0bcb24f7e9cb743b30232200c", + "pth": "045aaa0553e384bca097835a3689c8aedeef15118c1c6f69c5b38d1d04dfb20f" + }, + "source": { + "config": "config/config_dinov2_clip.toml", + "git_commit": "1a8130c922267fb0786a33e3854a7e00763cc38f+dirty", + "checkpoint_mtime": "2026-09-23T13:35:51" + }, + "metrics": { + "mIoU": 0.45433338700912007, + "mAcc": 0.6372685795566289, + "eval_samples": 186231 + } +} \ No newline at end of file diff --git a/DMS/dinov2_clip_gated/metrics.json b/DMS/dinov2_clip_gated/metrics.json new file mode 100644 index 0000000000000000000000000000000000000000..a9a318db802a0c748cf81c1dc349c43dfaa26f6d --- /dev/null +++ b/DMS/dinov2_clip_gated/metrics.json @@ -0,0 +1,296 @@ +{ + "dataset": "DMS", + "config": "config/config_dinov2_clip.toml", + "checkpoint": "/best_model_dinov2_clip.pth", + "fusion_type": "gated", + "num_eval_samples": 186231, + "mIoU": 0.45433338700912007, + "mAcc": 0.6372685795566289, + "per_class": { + "No label": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Animal skin": { + "accuracy": 0.5964912280701754, + "iou": 0.4657534246575342, + "support": 114 + }, + "Bone/teeth/horn": { + "accuracy": 0.7954545454545454, + "iou": 0.603448275862069, + "support": 44 + }, + "Brickwork": { + "accuracy": 0.775692582663092, + "iou": 0.4849162011173184, + "support": 1119 + }, + "Cardboard": { + "accuracy": 0.7605083088954057, + "iou": 0.44431753283837805, + "support": 1023 + }, + "Carpet/rug": { + "accuracy": 0.7795339412360689, + "iou": 0.46450132818159867, + "support": 4935 + }, + "Ceiling tile": { + "accuracy": 0.7887323943661971, + "iou": 0.4783404514948139, + "support": 994 + }, + "Ceramic": { + "accuracy": 0.8392311052861512, + "iou": 0.5887220349371743, + "support": 2289 + }, + "Chalkboard/blackboard": { + "accuracy": 0.7023255813953488, + "iou": 0.5171232876712328, + "support": 215 + }, + "Clutter": { + "accuracy": 0.39622641509433965, + "iou": 0.2692307692307692, + "support": 53 + }, + "Concrete": { + "accuracy": 0.496372430471584, + "iou": 0.27467380394780866, + "support": 1654 + }, + "Cork/corkboard": { + "accuracy": 0.4117647058823529, + "iou": 0.2441860465116279, + "support": 51 + }, + "Engineered stone": { + "accuracy": 0.2247191011235955, + "iou": 0.13986013986013987, + "support": 89 + }, + "Fabric/cloth": { + "accuracy": 0.7702929239456503, + "iou": 0.702627660858718, + "support": 22668 + }, + "Fiberglass wool": { + "accuracy": 0.55, + "iou": 0.3055555555555556, + "support": 20 + }, + "Fire": { + "accuracy": 0.78, + "iou": 0.65, + "support": 50 + }, + "Foliage": { + "accuracy": 0.9052897705173084, + "iou": 0.7798626235550343, + "support": 5142 + }, + "Food": { + "accuracy": 0.8737430167597765, + "iou": 0.6085603112840466, + "support": 895 + }, + "Fur": { + "accuracy": 0.8283062645011601, + "iou": 0.68, + "support": 431 + }, + "Gemstone/quartz": { + "accuracy": 0.72, + "iou": 0.2926829268292683, + "support": 50 + }, + "Glass": { + "accuracy": 0.760976692563818, + "iou": 0.6663686195233838, + "support": 22525 + }, + "Hair": { + "accuracy": 0.9763929618768329, + "iou": 0.9157040704070407, + "support": 6820 + }, + "I cannot tell": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Ice": { + "accuracy": 0.6363636363636364, + "iou": 0.44871794871794873, + "support": 55 + }, + "Leather": { + "accuracy": 0.7150890346766635, + "iou": 0.42721164613661816, + "support": 2134 + }, + "Liquid, non-water": { + "accuracy": 0.4444444444444444, + "iou": 0.3404255319148936, + "support": 36 + }, + "Metal": { + "accuracy": 0.7975601714474118, + "iou": 0.5638256545722943, + "support": 9099 + }, + "Mirror": { + "accuracy": 0.6700125470514429, + "iou": 0.3729050279329609, + "support": 797 + }, + "Not on list": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Paint/plaster/enamel": { + "accuracy": 0.5913390528267496, + "iou": 0.5186604189636164, + "support": 31821 + }, + "Paper": { + "accuracy": 0.8254024411816735, + "iou": 0.6823632641123135, + "support": 11306 + }, + "Pearl": { + "accuracy": 0.0, + "iou": 0.0, + "support": 1 + }, + "Photograph/painting": { + "accuracy": 0.7118034751348112, + "iou": 0.3496174220129488, + "support": 1669 + }, + "Plastic, clear": { + "accuracy": 0.6816199376947041, + "iou": 0.43830128205128205, + "support": 1605 + }, + "Plastic, non-clear": { + "accuracy": 0.6442321302193914, + "iou": 0.5032896555537126, + "support": 14130 + }, + "Rubber/latex": { + "accuracy": 0.6570363466915191, + "iou": 0.34474327628361856, + "support": 1073 + }, + "Sand": { + "accuracy": 0.42045454545454547, + "iou": 0.2890625, + "support": 88 + }, + "Skin/lips": { + "accuracy": 0.9697943988493104, + "iou": 0.9154952076677316, + "support": 11819 + }, + "Sky": { + "accuracy": 0.9127205199628597, + "iou": 0.6920098556846181, + "support": 2154 + }, + "Snow": { + "accuracy": 0.5963302752293578, + "iou": 0.40372670807453415, + "support": 109 + }, + "Soap": { + "accuracy": 0.0, + "iou": 0.0, + "support": 7 + }, + "Soil/mud": { + "accuracy": 0.624048706240487, + "iou": 0.4257528556593977, + "support": 657 + }, + "Sponge": { + "accuracy": 0.16666666666666666, + "iou": 0.125, + "support": 18 + }, + "Stone, natural": { + "accuracy": 0.6322686322686323, + "iou": 0.4419004006868918, + "support": 1221 + }, + "Stone, polished": { + "accuracy": 0.39580602883355176, + "iou": 0.252297410192147, + "support": 763 + }, + "Styrofoam": { + "accuracy": 0.16129032258064516, + "iou": 0.13513513513513514, + "support": 31 + }, + "Tile": { + "accuracy": 0.645155679248565, + "iou": 0.42412807318467693, + "support": 5749 + }, + "Wallpaper": { + "accuracy": 0.5654761904761905, + "iou": 0.3445149592021759, + "support": 672 + }, + "Water": { + "accuracy": 0.6651532349602725, + "iou": 0.5195035460992907, + "support": 881 + }, + "Wax": { + "accuracy": 0.8245614035087719, + "iou": 0.6861313868613139, + "support": 114 + }, + "Whiteboard": { + "accuracy": 0.6486486486486487, + "iou": 0.46652267818574517, + "support": 333 + }, + "Wicker": { + "accuracy": 0.7702479338842976, + "iou": 0.548235294117647, + "support": 605 + }, + "Wood": { + "accuracy": 0.7891884833844748, + "iou": 0.6155726434791465, + "support": 15317 + }, + "Wood, tree": { + "accuracy": 0.7431972789115646, + "iou": 0.4765539803707743, + "support": 588 + }, + "Bad polygon": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Multiple materials": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Asphalt": { + "accuracy": 0.5, + "iou": 0.2972972972972973, + "support": 198 + } + } +} \ No newline at end of file diff --git a/DMS/dinov2_clip_gated/model.pth b/DMS/dinov2_clip_gated/model.pth new file mode 100644 index 0000000000000000000000000000000000000000..33293d801a91b8638876458971b6b472c19a7f05 --- /dev/null +++ b/DMS/dinov2_clip_gated/model.pth @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:045aaa0553e384bca097835a3689c8aedeef15118c1c6f69c5b38d1d04dfb20f +size 6910974 diff --git a/DMS/dinov2_clip_gated/model.safetensors b/DMS/dinov2_clip_gated/model.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..f188d195e2c8aa5c2d65031b10644cd6f7ca6f32 --- /dev/null +++ b/DMS/dinov2_clip_gated/model.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0715e31f97766d6da1185b402bf47e44a44db6f0bcb24f7e9cb743b30232200c +size 6904172 diff --git a/DMS/dinov2_clip_gated/split.json b/DMS/dinov2_clip_gated/split.json new file mode 100644 index 0000000000000000000000000000000000000000..ed2d710870e464f901ddcb2864317aed506fd3c4 --- /dev/null +++ b/DMS/dinov2_clip_gated/split.json @@ -0,0 +1,8271 @@ +{ + "val_groups": [ + "100023", + "100684", + "100767", + "100806", + "101108", + "101397", + "101542", + "101771", + "102242", + "102298", + "102300", + "102441", + "102723", + "102859", + "102949", + "103045", + "103061", + "103310", + "103351", + "103376", + "103416", + "103494", + "103686", + "103990", + "104894", + "104911", + "104917", + "105053", + "105099", + "105227", + "105355", + "105416", + "105696", + "106358", + "106446", + "106475", + "106484", + "106527", + "106788", + "106933", + "107102", + "107279", + "107305", + "107566", + "107782", + "107866", + "108158", + "108647", + "109239", + "109695", + "109726", + "109789", + "109812", + "109881", + "109999", + "110235", + "110322", + "110893", + "111049", + "111228", + "111280", + "111386", + "112424", + "112448", + "112457", + "112665", + "112857", + "113143", + "113524", + "113793", + "113890", + "114202", + "114224", + "114225", + "114241", + "114705", + "114774", + "115020", + "115498", + "115499", + "115760", + "116168", + "116191", + "116298", + "116449", + "116606", + "116733", + "117104", + "117266", + "117505", + "117707", + "118431", + "119280", + "119283", + "119321", + "119466", + "119521", + "119533", + "119783", + "119809", + "119974", + "120020", + "120125", + "120312", + "120531", + "120550", + "120678", + "120808", + "121071", + "121220", + "121316", + "121985", + "122087", + "122094", + "122153", + "122404", + "122550", + "122844", + "122964", + "123297", + "123381", + "123445", + "123516", + "123601", + "123649", + "123702", + "124102", + "124157", + "124466", + "124752", + "125018", + "125522", + "125549", + "125597", + "125898", + "125979", + "125983", + "126186", + "126431", + "126648", + "126667", + "126907", + "126987", + "127294", + "127355", + "127396", + "127586", + "127669", + "127714", + "127973", + "128106", + "128229", + "128646", + "128868", + "129361", + "129605", + "129853", + "129906", + "129979", + "130273", + "130677", + "130702", + "130741", + "130972", + "131016", + "131115", + "131213", + "131299", + "131561", + "131598", + "131633", + "131677", + "132112", + "132235", + "132287", + "132495", + "132522", + "132602", + "132652", + "132730", + "132957", + "132980", + "133073", + "133187", + "133299", + "133571", + "133998", + "134034", + "134536", + "134647", + "134744", + "134773", + "134830", + "134835", + "134865", + "135254", + "135261", + "135282", + "135490", + "135709", + "136113", + "136415", + "136496", + "136599", + "136677", + "136726", + "136786", + "136847", + "136869", + "136995", + "137430", + "137533", + "137955", + "138677", + "138726", + "139100", + "139408", + "139623", + "139650", + "139653", + "139721", + "139748", + "139977", + "140398", + "140499", + "140727", + "140777", + "141064", + "141182", + "141248", + "141855", + "142040", + "142358", + "142418", + "142569", + "142763", + "142787", + "143098", + "143149", + "143193", + "143481", + "143614", + "143630", + "143668", + "143688", + "143821", + "143884", + "144224", + "144530", + "144759", + "144762", + "144978", + "145373", + "145421", + "145538", + "147431", + "147459", + "147723", + "147858", + "147868", + "148109", + "148756", + "148810", + "148826", + "149253", + "149401", + "149468", + "150308", + "150382", + "150544", + "150565", + "150607", + "150935", + "151054", + "151243", + "151309", + "151551", + "151581", + "151726", + "151871", + "152161", + "152558", + "152760", + "152845", + "153056", + "153383", + "153617", + "153763", + "154293", + "154636", + "154681", + "154850", + "154873", + "154992", + "155063", + "155394", + "155444", + "155476", + "155920", + "156257", + "156261", + "156366", + "156674", + "157619", + "157688", + "157961", + "158086", + "158156", + "158202", + "158423", + "158990", + "159370", + "159801", + "159862", + "159919", + "159957", + "160451", + "160464", + "160982", + "161162", + "161331", + "161519", + "161576", + "161866", + "162020", + "162036", + "162092", + "162306", + "162549", + "162678", + "162798", + "163001", + "163039", + "163164", + "163254", + "163444", + "163517", + "163613", + "163825", + "163860", + "164018", + "164101", + "164713", + "164795", + "164989", + "165403", + "165521", + "165722", + "165988", + "166002", + "166374", + "166659", + "166714", + "166951", + "167223", + "167462", + "167493", + "167663", + "167917", + "168095", + "168127", + "168694", + "168971", + "169649", + "169674", + "169728", + "169817", + "169838", + "170025", + "170807", + "170875", + "170998", + "171186", + "171219", + "171460", + "171626", + "171726", + "172073", + "172138", + "172222", + "172488", + "172575", + "172763", + "172830", + "172960", + "173232", + "173248", + "173732", + "174439", + "174449", + "174521", + "174666", + "175176", + "175266", + "175356", + "175504", + "175844", + "175887", + "176175", + "176211", + "176255", + "176296", + "176375", + "176444", + "176998", + "177058", + "177108", + "177336", + "177473", + "177536", + "177680", + "177701", + "178063", + "178199", + "178270", + "178278", + "178421", + "178454", + "178973", + "179168", + "179264", + "179369", + "179600", + "179943", + "180839", + "181026", + "181157", + "181763", + "181990", + "182089", + "182267", + "182568", + "182583", + "182605", + "182793", + "182840", + "183009", + "183268", + "183662", + "183829", + "183932", + "184491", + "184676", + "184770", + "184802", + "184841", + "184892", + "185054", + "185101", + "185117", + "185165", + "185298", + "185316", + "185777", + "186172", + "186197", + "186424", + "186481", + "186585", + "186719", + "186902", + "187744", + "187814", + "187894", + "188066", + "188085", + "188778", + "189232", + "189269", + "189397", + "189485", + "189490", + "189519", + "189574", + "189751", + "190146", + "190176", + "190206", + "190249", + "190250", + "190332", + "190448", + "190477", + "190569", + "191141", + "191237", + "191400", + "191635", + "192431", + "192460", + "192557", + "192778", + "192831", + "192947", + "193267", + "193325", + "193358", + "193365", + "193374", + "193387", + "193490", + "193566", + "193574", + "193637", + "193681", + "193728", + "193737", + "193811", + "193844", + "193941", + "194054", + "194063", + "194154", + "194170", + "194195", + "194240", + "194254", + "194268", + "194280", + "194303", + "194351", + "194418", + "194489", + "194561", + "194594", + "194597", + "194642", + "194676", + "194688", + "194711", + "194735", + "194800", + "194803", + "194811", + "194814", + "194828", + "194992", + "195013", + "195016", + "195035", + "195196", + "195230", + "195238", + "195296", + "195299", + "195348", + "195405", + "195408", + "195421", + "195475", + "195509", + "195526", + "195535", + "195569", + "195618", + "195638", + "195663", + "195705", + "195709", + "195714", + "195736", + "195789", + "195791", + "195803", + "195804", + "195807", + "195829", + "195831", + "195900", + "195926", + "195938", + "195943", + "195951", + "196009", + "196030", + "196046", + "196126", + "196127", + "196165", + "196221", + "196266", + "196286", + "196293", + "196342", + "196348", + "196369", + "196391", + "196448", + "196476", + "196503", + "196528", + "196529", + "196580", + "196584", + "196604", + "196613", + "196640", + "196641", + "196692", + "196705", + "196730", + "196805", + "196815", + "196850", + "196861", + "196872", + "196888", + "196925", + "196927", + "196981", + "196988", + "196990", + "197034", + "197065", + "197078", + "197087", + "197108", + "197149", + "197206", + "197251", + "197258", + "197263", + "197269", + "197282", + "197290", + "197308", + "197323", + "197348", + "197351", + "197380", + "197432", + "197467", + "197468", + "197516", + "197616", + "197632", + "197687", + "197717", + "197730", + "197781", + "197788", + "197835", + "197884", + "197910", + "197982", + "198031", + "198034", + "198126", + "198132", + "198202", + "198298", + "198314", + "198324", + "198328", + "198348", + "198442", + "198491", + "198550", + "198552", + "198577", + "198585", + "198625", + "198681", + "198690", + "198695", + "198697", + "198706", + "198712", + "198721", + "198724", + "198730", + "198732", + "198767", + "198815", + "198825", + "198907", + "198950", + "198969", + "199023", + "199034", + "199207", + "199245", + "199256", + "199271", + "199309", + "199370", + "199386", + "199396", + "199410", + "199461", + "199477", + "199486", + "199693", + "199733", + "199768", + "199796", + "199832", + "199855", + "199896", + "199910", + "199923", + "199933", + "199947", + "200017", + "200043", + "200108", + "200127", + "200152", + "200170", + "200238", + "200272", + "200309", + "200315", + "200342", + "200413", + "200443", + "200461", + "200551", + "200611", + "200639", + "200647", + "200663", + "200669", + "200692", + "200720", + "200757", + "200765", + "200768", + "200775", + "200803", + "200808", + "200889", + "200896", + "200897", + "200922", + "200983", + "200986", + "201005", + "201020", + "201045", + "201048", + "201113", + "201154", + "201187", + "201234", + "201243", + "201249", + "201284", + "201292", + "201347", + "201388", + "201410", + "201454", + "201497", + "201554", + "201559", + "201591", + "201614", + "201691", + "201754", + "201771", + "201808", + "201852", + "201856", + "201909", + "201913", + "201920", + "201941", + "201977", + "202005", + "202034", + "202120", + "202201", + "202218", + "202236", + "202253", + "202276", + "202307", + "202321", + "202324", + "202377", + "202382", + "202454", + "202490", + "202499", + "202531", + "202546", + "202567", + "202582", + "202630", + "202645", + "202702", + "202771", + "202777", + "202814", + "202873", + "202876", + "202898", + "202942", + "203001", + "203025", + "203044", + "203076", + "203174", + "203226", + "203232", + "203237", + "203240", + "203339", + "203343", + "203372", + "203392", + "203401", + "203416", + "203463", + "203486", + "203515", + "203775", + "203842", + "203844", + "203996", + "204003", + "204018", + "204032", + "204040", + "204104", + "204108", + "204179", + "204182", + "204197", + "204211", + "204212", + "204223", + "204250", + "204271", + "204398", + "204441", + "204448", + "204488", + "204489", + "204497", + "204499", + "204590", + "204628", + "204667", + "204710", + "204790", + "204797", + "204847", + "204850", + "204895", + "204999", + "205044", + "205054", + "205061", + "205093", + "205162", + "205171", + "205189", + "205193", + "205224", + "205245", + "205256", + "205317", + "205353", + "205483", + "205626", + "205646", + "205656", + "205701", + "205732", + "205754", + "205800", + "205846", + "205858", + "205859", + "205901", + "205942", + "205954", + "206023", + "206042", + "206076", + "206132", + "206233", + "206237", + "206249", + "206259", + "206272", + "206331", + "206376", + "206506", + "206545", + "206566", + "206568", + "206577", + "206592", + "206625", + "206773", + "206848", + "206919", + "206930", + "206938", + "206960", + "206963", + "206966", + "207000", + "207006", + "207014", + "207058", + "207081", + "207082", + "207129", + "207140", + "207167", + "207266", + "207283", + "207329", + "207347", + "207351", + "207481", + "207504", + "207554", + "207575", + "207701", + "207735", + "207754", + "207756", + "207757", + "207765", + "207768", + "207789", + "207814", + "207885", + "207888", + "207923", + "207933", + "207938", + "207955", + "207971", + "208023", + "208152", + "208159", + "208160", + "208171", + "208187", + "208201", + "208429", + "208441", + "208468", + "208497", + "208513", + "208532", + "208534", + "208555", + "208578", + "208592", + "208610", + "208625", + "208663", + "208680", + "208690", + "208694", + "208702", + "208723", + "208848", + "208856", + "208864", + "208885", + "208900", + "208924", + "208967", + "208968", + "209081", + "209085", + "209114", + "209174", + "209214", + "209221", + "209313", + "209367", + "209388", + "209396", + "209406", + "209415", + "209430", + "209438", + "209615", + "209653", + "209701", + "209709", + "209726", + "209737", + "209746", + "209753", + "209760", + "209765", + "209792", + "209796", + "209812", + "209823", + "209860", + "209861", + "209895", + "209901", + "209905", + "209932", + "209996", + "210064", + "210160", + "210197", + "210227", + "210229", + "210235", + "210318", + "210331", + "210341", + "210344", + "210353", + "210398", + "210399", + "210465", + "210466", + "210469", + "210473", + "210525", + "210540", + "210567", + "210581", + "210601", + "210668", + "210687", + "210762", + "210796", + "210818", + "210904", + "210930", + "210933", + "210967", + "210996", + "211023", + "211044", + "211069", + "211096", + "211101", + "211108", + "211155", + "211212", + "211268", + "211329", + "211356", + "211531", + "211537", + "211550", + "211595", + "211596", + "211629", + "211664", + "211684", + "211715", + "211752", + "211785", + "211854", + "211859", + "211880", + "211929", + "211937", + "211973", + "211974", + "212055", + "212093", + "212149", + "212153", + "212251", + "212302", + "212366", + "212523", + "212528", + "212559", + "212580", + "212628", + "212696", + "212740", + "212915", + "212956", + "212969", + "212975", + "213064", + "213065", + "213109", + "213113", + "213213", + "213254", + "213365", + "213375", + "213380", + "213385", + "213394", + "213400", + "213503", + "213514", + "213524", + "213534", + "213551", + "213601", + "213636", + "213651", + "213664", + "213737", + "213778", + "213792", + "213816", + "213854", + "213855", + "213871", + "213880", + "213884", + "213996", + "214128", + "214181", + "214188", + "214193", + "214212", + "214272", + "214310", + "214329", + "214331", + "214347", + "214420", + "214434", + "214443", + "214469", + "214481", + "214515", + "214562", + "214633", + "214669", + "214696", + "214701", + "214717", + "214745", + "214779", + "214807", + "214830", + "214921", + "214927", + "214931", + "214990", + "215005", + "215024", + "215076", + "215099", + "215116", + "215172", + "215175", + "215181", + "215196", + "215215", + "215253", + "215308", + "215323", + "215330", + "215373", + "215435", + "215440", + "215479", + "215491", + "215533", + "215583", + "215584", + "215687", + "215693", + "215706", + "215718", + "215778", + "215807", + "215838", + "215859", + "215877", + "215924", + "215935", + "215945", + "215951", + "216020", + "216026", + "216033", + "216040", + "216069", + "216081", + "216174", + "216193", + "216196", + "216207", + "216328", + "216343", + "216430", + "216444", + "216445", + "216497", + "216500", + "216511", + "216513", + "216535", + "216765", + "216967", + "217059", + "217065", + "217076", + "217147", + "217151", + "217155", + "217181", + "217326", + "217363", + "217381", + "217412", + "217475", + "217476", + "217534", + "217565", + "217568", + "217645", + "217660", + "217675", + "217740", + "217779", + "217808", + "217830", + "217858", + "217878", + "217884", + "217908", + "217914", + "217956", + "218062", + "218063", + "218134", + "218137", + "218142", + "218173", + "218178", + "218198", + "218240", + "218281", + "218294", + "218350", + "218373", + "218385", + "218400", + "218425", + "218435", + "218475", + "218502", + "218582", + "218675", + "218687", + "218717", + "218722", + "218781", + "218833", + "218841", + "218944", + "218981", + "218985", + "219032", + "219037", + "219062", + "219065", + "219085", + "219150", + "219165", + "219246", + "219263", + "219295", + "219324", + "219332", + "219381", + "219390", + "219425", + "219454", + "219458", + "219459", + "219475", + "219485", + "219561", + "219619", + "219626", + "219641", + "219665", + "219693", + "219696", + "219740", + "219754", + "219763", + "219799", + "219807", + "219880", + "219958", + "220010", + "220046", + "220081", + "220118", + "220130", + "220140", + "220198", + "220227", + "220318", + "220326", + "220349", + "220391", + "220407", + "220408", + "220419", + "220453", + "220458", + "220471", + "220473", + "220474", + "220477", + "220485", + "220518", + "220539", + "220551", + "220553", + "220572", + "220647", + "220649", + "220653", + "220669", + "220781", + "220787", + "220809", + "220880", + "220898", + "220946", + "220968", + "220984", + "220992", + "221029", + "221030", + "221074", + "221112", + "221125", + "221176", + "221184", + "221221", + "221248", + "221277", + "221305", + "221314", + "221382", + "221400", + "221412", + "221448", + "221454", + "221470", + "221485", + "221489", + "221495", + "221505", + "221562", + "221583", + "221605", + "221606", + "221721", + "221733", + "221763", + "221773", + "221792", + "221799", + "221923", + "222027", + "222127", + "222131", + "222143", + "222191", + "222222", + "222268", + "222269", + "222332", + "222447", + "222449", + "222475", + "222498", + "222520", + "222532", + "222535", + "222560", + "222681", + "222719", + "222759", + "222817", + "222819", + "222828", + "222855", + "222966", + "222979", + "223064", + "223077", + "223106", + "223163", + "223178", + "223189", + "223194", + "223218", + "223289", + "223294", + "223311", + "223318", + "223321", + "223397", + "223401", + "223416", + "223418", + "223462", + "223476", + "223510", + "223543", + "223552", + "223662", + "223673", + "223691", + "223723", + "223838", + "223885", + "223895", + "223918", + "223928", + "223930", + "223933", + "223966", + "224017", + "224022", + "224116", + "224119", + "224172", + "224259", + "224302", + "224328", + "224379", + "224390", + "224409", + "224440", + "224443", + "224457", + "224483", + "224485", + "224496", + "224499", + "224525", + "224537", + "224538", + "224543", + "224549", + "224566", + "224596", + "224614", + "224701", + "224714", + "224754", + "224776", + "224781", + "224830", + "224891", + "22501", + "225044", + "22506", + "225063", + "22507", + "225082", + "225138", + "225162", + "225192", + "225232", + "22524", + "225253", + "225266", + "22527", + "225274", + "22530", + "225303", + "225311", + "225319", + "225327", + "225346", + "22535", + "22537", + "22541", + "225413", + "225428", + "22543", + "225442", + "225473", + "225497", + "225550", + "22556", + "225576", + "22558", + "225618", + "22564", + "22565", + "225688", + "225706", + "22572", + "22574", + "22575", + "225762", + "225766", + "22578", + "22580", + "225846", + "22585", + "225871", + "225907", + "22594", + "225968", + "225989", + "225990", + "22600", + "226008", + "22601", + "22603", + "226059", + "22606", + "226096", + "22611", + "226117", + "226202", + "226230", + "226302", + "22633", + "226336", + "22634", + "226398", + "22641", + "22642", + "226429", + "226448", + "226481", + "226488", + "226491", + "226511", + "226533", + "226566", + "22658", + "226583", + "226586", + "226598", + "226613", + "226648", + "22665", + "226668", + "226702", + "226704", + "226709", + "226767", + "226778", + "226785", + "226849", + "22685", + "22686", + "226883", + "226884", + "226892", + "226915", + "226931", + "226940", + "226958", + "22698", + "226984", + "226993", + "227008", + "22704", + "227086", + "227160", + "227162", + "227163", + "227169", + "227173", + "227182", + "227193", + "22720", + "22721", + "227211", + "227223", + "22723", + "227231", + "227245", + "227275", + "227292", + "227297", + "227314", + "227344", + "227347", + "22740", + "227410", + "227472", + "22748", + "227481", + "22750", + "22753", + "227544", + "227549", + "22756", + "22758", + "227599", + "227616", + "22762", + "227621", + "227627", + "227667", + "227670", + "227681", + "22769", + "227691", + "227697", + "22771", + "227726", + "227753", + "227779", + "22779", + "227799", + "227837", + "227848", + "227914", + "227927", + "22795", + "227967", + "227969", + "227980", + "227986", + "227991", + "228011", + "228025", + "22803", + "228035", + "228043", + "22809", + "22810", + "22814", + "22815", + "228158", + "22816", + "228166", + "228169", + "228181", + "22819", + "22821", + "228212", + "22823", + "228238", + "228253", + "22827", + "228280", + "228285", + "228305", + "228351", + "22836", + "228378", + "228392", + "22842", + "228458", + "228482", + "228496", + "22854", + "228592", + "228614", + "228616", + "22868", + "228691", + "22871", + "22873", + "228771", + "228800", + "22884", + "22885", + "22891", + "228938", + "228939", + "22895", + "22896", + "228961", + "228988", + "228999", + "229024", + "229032", + "22908", + "229083", + "22918", + "229189", + "22919", + "229197", + "22920", + "229209", + "22923", + "229232", + "229235", + "229321", + "229328", + "229364", + "229378", + "229398", + "22940", + "22944", + "229440", + "229456", + "22947", + "229524", + "22953", + "22954", + "22955", + "22956", + "22957", + "22958", + "229603", + "22961", + "229613", + "229656", + "22967", + "229705", + "22971", + "229809", + "229814", + "229859", + "22986", + "229902", + "22991", + "229918", + "22993", + "229943", + "22998", + "229984", + "229994", + "23000", + "230003", + "230009", + "23001", + "230024", + "230034", + "23009", + "23010", + "230109", + "230114", + "230115", + "230118", + "23014", + "230145", + "230147", + "23016", + "230243", + "230257", + "230258", + "230276", + "230281", + "23029", + "23030", + "230305", + "230360", + "23039", + "230394", + "230403", + "230406", + "230486", + "23049", + "23051", + "230519", + "23054", + "230569", + "23058", + "23059", + "230604", + "230620", + "230644", + "23066", + "23071", + "230711", + "230729", + "230754", + "230765", + "230776", + "23080", + "230803", + "23082", + "230822", + "230825", + "23086", + "230913", + "230915", + "230917", + "23092", + "230927", + "230965", + "23098", + "23100", + "231015", + "231038", + "231065", + "23107", + "23108", + "231098", + "231100", + "231171", + "23120", + "231224", + "231236", + "23126", + "231277", + "23130", + "231312", + "231340", + "231382", + "231389", + "23145", + "23153", + "231589", + "23162", + "231633", + "23166", + "23167", + "231710", + "231722", + "23173", + "231732", + "23175", + "23179", + "231838", + "231857", + "231883", + "231902", + "231904", + "23192", + "231935", + "23200", + "23202", + "23204", + "232073", + "232080", + "232095", + "23215", + "232181", + "232190", + "23221", + "232213", + "232235", + "232263", + "232338", + "23234", + "23239", + "232407", + "232434", + "232445", + "23246", + "232480", + "232488", + "232523", + "23256", + "23259", + "232594", + "23260", + "23263", + "232630", + "23264", + "23266", + "232693", + "232698", + "232700", + "232702", + "23272", + "232738", + "232764", + "23278", + "232787", + "23281", + "23284", + "23285", + "23287", + "232875", + "232878", + "23288", + "232885", + "23294", + "232948", + "232970", + "232972", + "232976", + "232998", + "233008", + "233009", + "233015", + "233034", + "233037", + "23308", + "23309", + "23310", + "233119", + "23312", + "233141", + "233208", + "23321", + "23322", + "23324", + "233246", + "233267", + "233282", + "233299", + "23332", + "233326", + "233330", + "23340", + "23353", + "23357", + "23359", + "23372", + "23374", + "23375", + "23383", + "23388", + "23395", + "23402", + "23404", + "23406", + "23409", + "23413", + "23420", + "23434", + "23441", + "23443", + "23453", + "23454", + "23462", + "23463", + "23464", + "23467", + "23475", + "23480", + "23485", + "23489", + "23490", + "23502", + "23504", + "23509", + "23510", + "23514", + "23516", + "23541", + "23542", + "23548", + "23549", + "23551", + "23555", + "23559", + "23578", + "23579", + "23583", + "23585", + "23589", + "23591", + "23612", + "23616", + "23621", + "23627", + "23637", + "23652", + "23654", + "23656", + "23657", + "23668", + "23681", + "23686", + "23692", + "23696", + "23697", + "23701", + "23702", + "23709", + "23739", + "23744", + "23753", + "23756", + "23764", + "23766", + "23774", + "23776", + "23784", + "23785", + "23794", + "23796", + "23799", + "23803", + "23823", + "23824", + "23825", + "23827", + "23835", + "23846", + "23855", + "23859", + "23868", + "23871", + "23876", + "23890", + "23891", + "23893", + "23895", + "23896", + "23897", + "23901", + "23906", + "23921", + "23928", + "23933", + "23945", + "23950", + "23953", + "23955", + "23960", + "23967", + "23973", + "23980", + "23981", + "23984", + "23988", + "23993", + "23995", + "23999", + "24005", + "24019", + "24022", + "24024", + "24029", + "24032", + "24033", + "24036", + "24037", + "24039", + "24043", + "24047", + "24056", + "24059", + "24060", + "24061", + "24072", + "24079", + "24085", + "24090", + "24101", + "24106", + "24112", + "24113", + "24118", + "24119", + "24123", + "24130", + "24131", + "24134", + "24136", + "24138", + "24142", + "24164", + "24168", + "24171", + "24176", + "24181", + "24184", + "24192", + "24197", + "24198", + "24200", + "24219", + "24223", + "24227", + "24230", + "24241", + "24246", + "24250", + "24251", + "24255", + "24263", + "24264", + "24269", + "24273", + "24275", + "24278", + "24284", + "24297", + "24303", + "24305", + "24309", + "24315", + "24323", + "24326", + "24333", + "24337", + "24338", + "24339", + "24341", + "24344", + "24353", + "24361", + "24373", + "24383", + "24390", + "24393", + "24396", + "24400", + "24404", + "24405", + "24410", + "24412", + "24433", + "24436", + "24438", + "24441", + "24446", + "24452", + "24453", + "24464", + "24466", + "24469", + "24487", + "24493", + "24500", + "24508", + "24513", + "24516", + "24517", + "24524", + "24527", + "24531", + "24541", + "24549", + "24557", + "24567", + "24578", + "24579", + "24580", + "24585", + "24588", + "24590", + "24599", + "24600", + "24616", + "24627", + "24630", + "24632", + "24633", + "24637", + "24639", + "24645", + "24649", + "24651", + "24655", + "24657", + "24668", + "24670", + "24676", + "24684", + "24688", + "24689", + "24692", + "24702", + "24704", + "24711", + "24716", + "24717", + "24733", + "24736", + "24739", + "24743", + "24769", + "24774", + "24777", + "24779", + "24782", + "24789", + "24798", + "24799", + "24801", + "24808", + "24822", + "24824", + "24832", + "24836", + "24849", + "24855", + "24863", + "24872", + "24879", + "24881", + "24884", + "24885", + "24886", + "24887", + "24888", + "24894", + "24895", + "24898", + "24902", + "24908", + "24917", + "24925", + "24928", + "24932", + "24940", + "24945", + "24956", + "24959", + "24962", + "24963", + "24968", + "24969", + "24983", + "24985", + "24986", + "24991", + "24995", + "24999", + "25001", + "25007", + "25009", + "25011", + "25012", + "25015", + "25018", + "25020", + "25021", + "25025", + "25031", + "25045", + "25049", + "25054", + "25058", + "25071", + "25081", + "25082", + "25087", + "25091", + "25105", + "25108", + "25112", + "25113", + "25117", + "25119", + "25124", + "25125", + "25129", + "25143", + "25145", + "25160", + "25168", + "25176", + "25186", + "25187", + "25193", + "25194", + "25196", + "25199", + "25207", + "25211", + "25215", + "25217", + "25218", + "25227", + "25245", + "25254", + "25270", + "25284", + "25288", + "25296", + "25299", + "25305", + "25333", + "25337", + "25338", + "25347", + "25349", + "25350", + "25353", + "25355", + "25358", + "25370", + "25393", + "25403", + "25412", + "25413", + "25414", + "25417", + "25422", + "25423", + "25425", + "25428", + "25434", + "25437", + "25449", + "25450", + "25451", + "25452", + "25471", + "25473", + "25474", + "25480", + "25485", + "25486", + "25495", + "25508", + "25509", + "25512", + "25514", + "25518", + "25520", + "25523", + "25524", + "25527", + "25530", + "25531", + "25539", + "25542", + "25544", + "25545", + "25554", + "25561", + "25565", + "25566", + "25577", + "25579", + "25582", + "25587", + "25597", + "25598", + "25601", + "25611", + "25619", + "25622", + "25632", + "25635", + "25637", + "25639", + "25643", + "25647", + "25654", + "25661", + "25665", + "25672", + "25674", + "25677", + "25679", + "25682", + "25686", + "25688", + "25693", + "25696", + "25699", + "25700", + "25704", + "25706", + "25711", + "25712", + "25718", + "25722", + "25726", + "25728", + "25734", + "25740", + "25743", + "25745", + "25747", + "25750", + "25780", + "25785", + "25787", + "25798", + "25799", + "25816", + "25819", + "25823", + "25825", + "25830", + "25834", + "25841", + "25848", + "25853", + "25854", + "25861", + "25863", + "25866", + "25868", + "25869", + "25874", + "25879", + "25899", + "25904", + "25905", + "25913", + "25941", + "25944", + "25945", + "25948", + "25950", + "25953", + "25959", + "25971", + "25973", + "25974", + "25980", + "25983", + "25990", + "25992", + "25994", + "25998", + "25999", + "26004", + "26015", + "26016", + "26017", + "26020", + "26021", + "26024", + "26032", + "26033", + "26039", + "26043", + "26047", + "26053", + "26062", + "26070", + "26074", + "26084", + "26089", + "26093", + "26094", + "26107", + "26108", + "26120", + "26136", + "26144", + "26155", + "26157", + "26159", + "26162", + "26168", + "26170", + "26173", + "26180", + "26184", + "26190", + "26191", + "26197", + "26203", + "26216", + "26220", + "26233", + "26235", + "26243", + "26244", + "26245", + "26253", + "26256", + "26277", + "26281", + "26284", + "26286", + "26289", + "26291", + "26299", + "26316", + "26325", + "26327", + "26347", + "26348", + "26351", + "26352", + "26354", + "26358", + "26359", + "26360", + "26365", + "26371", + "26375", + "26388", + "26399", + "26410", + "26412", + "26414", + "26426", + "26437", + "26438", + "26439", + "26452", + "26477", + "26481", + "26485", + "26486", + "26489", + "26517", + "26526", + "26530", + "26539", + "26541", + "26546", + "26558", + "26560", + "26571", + "26576", + "26577", + "26578", + "26579", + "26581", + "26603", + "26615", + "26620", + "26625", + "26631", + "26643", + "26644", + "26645", + "26658", + "26661", + "26666", + "26670", + "26671", + "26683", + "26685", + "26686", + "26692", + "26696", + "26699", + "26700", + "26707", + "26711", + "26718", + "26735", + "26736", + "26745", + "26748", + "26753", + "26760", + "26762", + "26764", + "26766", + "26768", + "26773", + "26780", + "26785", + "26790", + "26800", + "26808", + "26811", + "26817", + "26818", + "26819", + "26821", + "26833", + "26858", + "26861", + "26872", + "26874", + "26875", + "26878", + "26884", + "26892", + "26895", + "26897", + "26912", + "26918", + "26926", + "26929", + "26937", + "26944", + "26954", + "26958", + "26964", + "26966", + "26968", + "26969", + "26976", + "26980", + "26981", + "26991", + "26992", + "27024", + "27027", + "27028", + "27031", + "27033", + "27042", + "27043", + "27046", + "27050", + "27065", + "27067", + "27078", + "27084", + "27093", + "27121", + "27130", + "27138", + "27144", + "27145", + "27163", + "27172", + "27176", + "27192", + "27193", + "27197", + "27198", + "27200", + "27204", + "27206", + "27223", + "27224", + "27234", + "27236", + "27239", + "27247", + "27249", + "27254", + "27261", + "27268", + "27270", + "27276", + "27277", + "27282", + "27283", + "27284", + "27295", + "27296", + "27301", + "27305", + "27307", + "27313", + "27316", + "27321", + "27323", + "27326", + "27332", + "27346", + "27355", + "27358", + "27361", + "27365", + "27368", + "27369", + "27370", + "27374", + "27382", + "27387", + "27391", + "27395", + "27407", + "27409", + "27421", + "27430", + "27432", + "27436", + "27437", + "27443", + "27444", + "27450", + "27452", + "27458", + "27467", + "27468", + "27473", + "27474", + "27485", + "27487", + "27492", + "27496", + "27497", + "27499", + "27502", + "27508", + "27509", + "27512", + "27519", + "27525", + "27527", + "27529", + "27543", + "27549", + "27553", + "27559", + "27560", + "27570", + "27576", + "27577", + "27579", + "27581", + "27584", + "27592", + "27594", + "27601", + "27604", + "27607", + "27608", + "27611", + "27612", + "27619", + "27624", + "27626", + "27642", + "27648", + "27658", + "27660", + "27671", + "27682", + "27687", + "27688", + "27703", + "27705", + "27714", + "27716", + "27721", + "27722", + "27732", + "27734", + "27740", + "27743", + "27747", + "27749", + "27750", + "27757", + "27760", + "27766", + "27773", + "27780", + "27783", + "27789", + "27798", + "27800", + "27815", + "27817", + "27832", + "27833", + "27836", + "27850", + "27852", + "27858", + "27869", + "27876", + "27877", + "27879", + "27880", + "27881", + "27883", + "27888", + "27893", + "27920", + "27931", + "27935", + "27936", + "27938", + "27940", + "27941", + "27943", + "27947", + "27949", + "27956", + "27962", + "27970", + "27986", + "28006", + "28007", + "28008", + "28013", + "28026", + "28027", + "28028", + "28031", + "28038", + "28039", + "28045", + "28047", + "28050", + "28052", + "28061", + "28069", + "28070", + "28072", + "28073", + "28081", + "28082", + "28090", + "28100", + "28106", + "28109", + "28110", + "28112", + "28116", + "28119", + "28121", + "28122", + "28134", + "28141", + "28150", + "28153", + "28155", + "28158", + "28159", + "28160", + "28162", + "28163", + "28169", + "28177", + "28181", + "28182", + "28183", + "28190", + "28191", + "28197", + "28205", + "28207", + "28208", + "28209", + "28212", + "28218", + "28223", + "28226", + "28228", + "28229", + "28232", + "28241", + "28242", + "28244", + "28249", + "28252", + "28261", + "28262", + "28263", + "28272", + "28273", + "28278", + "28285", + "28294", + "28296", + "28299", + "28311", + "28319", + "28320", + "28323", + "28332", + "28338", + "28346", + "28350", + "28360", + "28372", + "28376", + "28378", + "28382", + "28383", + "28390", + "28392", + "28395", + "28396", + "28411", + "28416", + "28423", + "28441", + "28452", + "28453", + "28463", + "28467", + "28471", + "28473", + "28476", + "28479", + "28483", + "28489", + "28498", + "28499", + "28501", + "28503", + "28504", + "28512", + "28515", + "28517", + "28519", + "28526", + "28538", + "28540", + "28541", + "28542", + "28546", + "28548", + "28553", + "28557", + "28558", + "28560", + "28583", + "28584", + "28591", + "28595", + "28598", + "28600", + "28601", + "28607", + "28609", + "28611", + "28612", + "28616", + "28621", + "28622", + "28631", + "28645", + "28647", + "28660", + "28661", + "28662", + "28665", + "28675", + "28682", + "28685", + "28691", + "28697", + "28699", + "28700", + "28708", + "28719", + "28724", + "28725", + "28727", + "28728", + "28740", + "28741", + "28744", + "28747", + "28749", + "28760", + "28763", + "28764", + "28777", + "28778", + "28782", + "28788", + "28793", + "28794", + "28797", + "28798", + "28803", + "28827", + "28831", + "28833", + "28842", + "28844", + "28846", + "28847", + "28863", + "28867", + "28885", + "28888", + "28895", + "28898", + "28902", + "28912", + "28914", + "28919", + "28923", + "28925", + "28927", + "28939", + "28940", + "28945", + "28949", + "28951", + "28954", + "28956", + "28958", + "28960", + "28972", + "28973", + "28981", + "28982", + "28992", + "29010", + "29022", + "29034", + "29036", + "29040", + "29059", + "29060", + "29072", + "29074", + "29075", + "29077", + "29086", + "29094", + "29095", + "29104", + "29106", + "29107", + "29111", + "29121", + "29124", + "29130", + "29132", + "29147", + "29184", + "29190", + "29215", + "29222", + "29223", + "29242", + "29249", + "29258", + "29260", + "29263", + "29266", + "29281", + "29285", + "29291", + "29304", + "29309", + "29310", + "29315", + "29318", + "29321", + "29326", + "29340", + "29345", + "29347", + "29360", + "29361", + "29366", + "29371", + "29377", + "29394", + "29399", + "29404", + "29406", + "29411", + "29443", + "29447", + "29453", + "29462", + "29468", + "29479", + "29495", + "29499", + "29505", + "29507", + "29509", + "29515", + "29519", + "29524", + "29530", + "29544", + "29546", + "29547", + "29555", + "29563", + "29566", + "29573", + "29575", + "29576", + "29578", + "29590", + "29591", + "29607", + "29634", + "29635", + "29644", + "29645", + "29650", + "29652", + "29658", + "29662", + "29663", + "29676", + "29679", + "29680", + "29684", + "29692", + "29696", + "29699", + "29704", + "29705", + "29707", + "29719", + "29723", + "29725", + "29726", + "29729", + "29735", + "29742", + "29750", + "29762", + "29769", + "29772", + "29774", + "29780", + "29781", + "29792", + "29801", + "29806", + "29811", + "29816", + "29817", + "29821", + "29832", + "29834", + "29836", + "29838", + "29841", + "29843", + "29846", + "29847", + "29853", + "29858", + "29861", + "29868", + "29870", + "29871", + "29883", + "29894", + "29896", + "29898", + "29905", + "29908", + "29911", + "29914", + "29918", + "29927", + "29931", + "29933", + "29941", + "29949", + "29955", + "29961", + "29964", + "29966", + "29967", + "29976", + "29980", + "29983", + "29984", + "29994", + "29997", + "30002", + "30010", + "30021", + "30027", + "30028", + "30029", + "30034", + "30038", + "30047", + "30048", + "30049", + "30050", + "30051", + "30061", + "30064", + "30071", + "30074", + "30075", + "30077", + "30082", + "30087", + "30093", + "30100", + "30101", + "30102", + "30109", + "30117", + "30124", + "30131", + "30134", + "30143", + "30145", + "30154", + "30155", + "30173", + "30177", + "30197", + "30201", + "30203", + "30210", + "30214", + "30216", + "30221", + "30223", + "30231", + "30239", + "30240", + "30242", + "30245", + "30247", + "30254", + "30260", + "30271", + "30272", + "30284", + "30289", + "30296", + "30307", + "30310", + "30312", + "30313", + "30319", + "30328", + "30331", + "30340", + "30345", + "30346", + "30348", + "30356", + "30360", + "30365", + "30375", + "30382", + "30402", + "30403", + "30405", + "30410", + "30414", + "30436", + "30440", + "30441", + "30444", + "30454", + "30457", + "30473", + "30474", + "30476", + "30485", + "30496", + "30501", + "30506", + "30507", + "30513", + "30521", + "30522", + "30524", + "30529", + "30531", + "30534", + "30541", + "30548", + "30551", + "30555", + "30556", + "30560", + "30563", + "30565", + "30567", + "30586", + "30588", + "30590", + "30599", + "30604", + "30614", + "30650", + "30653", + "30656", + "30663", + "30666", + "30667", + "30669", + "30678", + "30689", + "30700", + "30704", + "30711", + "30727", + "30728", + "30729", + "30731", + "30745", + "30746", + "30748", + "30750", + "30759", + "30760", + "30766", + "30771", + "30781", + "30782", + "30794", + "30797", + "30805", + "30813", + "30818", + "30821", + "30848", + "30849", + "30854", + "30868", + "30869", + "30873", + "30874", + "30879", + "30893", + "30896", + "30902", + "30908", + "30911", + "30913", + "30917", + "30918", + "30931", + "30943", + "30949", + "30954", + "30959", + "30964", + "30974", + "30977", + "30981", + "30985", + "30996", + "30997", + "31003", + "31020", + "31025", + "31032", + "31061", + "31064", + "31065", + "31076", + "31082", + "31091", + "31104", + "31105", + "31115", + "31121", + "31123", + "31132", + "31134", + "31138", + "31145", + "31149", + "31154", + "31156", + "31166", + "31167", + "31168", + "31169", + "31170", + "31177", + "31182", + "31183", + "31188", + "31196", + "31198", + "31199", + "31210", + "31227", + "31230", + "31234", + "31244", + "31245", + "31251", + "31252", + "31258", + "31267", + "31275", + "31280", + "31281", + "31282", + "31292", + "31306", + "31307", + "31308", + "31311", + "31312", + "31313", + "31320", + "31330", + "31350", + "31358", + "31359", + "31363", + "31365", + "31381", + "31393", + "31395", + "31396", + "31405", + "31408", + "31414", + "31416", + "31425", + "31426", + "31429", + "31434", + "31437", + "31440", + "31443", + "31448", + "31460", + "31463", + "31469", + "31478", + "31482", + "31485", + "31490", + "31503", + "31509", + "31521", + "31527", + "31538", + "31541", + "31543", + "31546", + "31552", + "31554", + "31563", + "31564", + "31573", + "31579", + "31589", + "31601", + "31602", + "31614", + "31619", + "31623", + "31636", + "31648", + "31654", + "31659", + "31678", + "31688", + "31689", + "31693", + "31711", + "31717", + "31721", + "31725", + "31727", + "31729", + "31731", + "31733", + "31737", + "31740", + "31742", + "31745", + "31748", + "31764", + "31769", + "31772", + "31777", + "31779", + "31785", + "31796", + "31801", + "31810", + "31813", + "31818", + "31819", + "31821", + "31823", + "31824", + "31825", + "31826", + "31828", + "31830", + "31837", + "31845", + "31847", + "31850", + "31851", + "31855", + "31856", + "31857", + "31866", + "31883", + "31889", + "31892", + "31903", + "31907", + "31909", + "31915", + "31919", + "31922", + "31924", + "31927", + "31928", + "31944", + "31945", + "31958", + "31960", + "31963", + "31964", + "31966", + "31971", + "31973", + "31980", + "31986", + "31991", + "31992", + "31994", + "31997", + "32011", + "32016", + "32020", + "32027", + "32029", + "32031", + "32034", + "32039", + "32057", + "32065", + "32073", + "32074", + "32080", + "32082", + "32083", + "32089", + "32091", + "32097", + "32099", + "32100", + "32101", + "32107", + "32109", + "32115", + "32128", + "32141", + "32148", + "32156", + "32177", + "32178", + "32184", + "32187", + "32194", + "32195", + "32196", + "32197", + "32201", + "32212", + "32213", + "32225", + "32231", + "32237", + "32241", + "32247", + "32249", + "32250", + "32265", + "32268", + "32270", + "32276", + "32277", + "32280", + "32281", + "32285", + "32287", + "32288", + "32293", + "32296", + "32305", + "32307", + "32314", + "32326", + "32331", + "32332", + "32342", + "32347", + "32350", + "32362", + "32368", + "32370", + "32376", + "32377", + "32382", + "32385", + "32387", + "32395", + "32412", + "32415", + "32421", + "32430", + "32431", + "32434", + "32435", + "32437", + "32439", + "32452", + "32460", + "32465", + "32467", + "32471", + "32473", + "32474", + "32485", + "32492", + "32495", + "32499", + "32509", + "32515", + "32519", + "32525", + "32527", + "32538", + "32545", + "32551", + "32564", + "32567", + "32568", + "32578", + "32590", + "32601", + "32603", + "32604", + "32607", + "32609", + "32610", + "32613", + "32615", + "32630", + "32631", + "32634", + "32645", + "32646", + "32659", + "32661", + "32665", + "32673", + "32675", + "32678", + "32682", + "32701", + "32702", + "32704", + "32705", + "32709", + "32717", + "32732", + "32742", + "32756", + "32759", + "32763", + "32771", + "32773", + "32774", + "32777", + "32779", + "32781", + "32783", + "32787", + "32791", + "32796", + "32805", + "32808", + "32815", + "32821", + "32826", + "32833", + "32836", + "32847", + "32852", + "32854", + "32858", + "32867", + "32872", + "32884", + "32886", + "32903", + "32907", + "32914", + "32921", + "32922", + "32934", + "32936", + "32941", + "32945", + "32948", + "32963", + "32964", + "32968", + "32976", + "32980", + "32983", + "32984", + "33007", + "33010", + "33025", + "33027", + "33032", + "33035", + "33037", + "33049", + "33050", + "33053", + "33054", + "33057", + "33066", + "33067", + "33073", + "33077", + "33079", + "33085", + "33086", + "33087", + "33091", + "33095", + "33097", + "33104", + "33112", + "33114", + "33121", + "33122", + "33123", + "33133", + "33138", + "33139", + "33140", + "33141", + "33143", + "33158", + "33161", + "33174", + "33175", + "33176", + "33184", + "33189", + "33191", + "33198", + "33201", + "33207", + "33213", + "33217", + "33218", + "33219", + "33227", + "33231", + "33234", + "33237", + "33238", + "33239", + "33252", + "33256", + "33257", + "33273", + "33279", + "33283", + "33286", + "33287", + "33288", + "33292", + "33295", + "33300", + "33302", + "33303", + "33305", + "33311", + "33318", + "33320", + "33323", + "33325", + "33330", + "33335", + "33337", + "33350", + "33358", + "33363", + "33375", + "33377", + "33383", + "33385", + "33391", + "33394", + "33397", + "33419", + "33437", + "33445", + "33458", + "33460", + "33464", + "33465", + "33470", + "33473", + "33491", + "33494", + "33496", + "33497", + "33499", + "33508", + "33509", + "33517", + "33520", + "33526", + "33530", + "33531", + "33532", + "33536", + "33544", + "33551", + "33552", + "33563", + "33564", + "33566", + "33567", + "33575", + "33584", + "33589", + "33590", + "33598", + "33609", + "33615", + "33616", + "33633", + "33635", + "33638", + "33639", + "33641", + "33645", + "33647", + "33656", + "33661", + "33669", + "33677", + "33685", + "33692", + "33703", + "33706", + "33721", + "33722", + "33726", + "33729", + "33735", + "33742", + "33748", + "33749", + "33760", + "33770", + "33801", + "33802", + "33811", + "33814", + "33816", + "33819", + "33822", + "33829", + "33832", + "33840", + "33851", + "33868", + "33871", + "33874", + "33882", + "33886", + "33888", + "33892", + "33903", + "33909", + "33912", + "33916", + "33918", + "33919", + "33922", + "33926", + "33927", + "33935", + "33940", + "33944", + "33946", + "33951", + "33962", + "33965", + "33968", + "33971", + "33981", + "33989", + "33993", + "34011", + "34021", + "34034", + "34048", + "34053", + "34057", + "34067", + "34068", + "34070", + "34079", + "34082", + "34088", + "34110", + "34111", + "34113", + "34120", + "34124", + "34140", + "34155", + "34159", + "34164", + "34178", + "34180", + "34193", + "34200", + "34202", + "34214", + "34215", + "34223", + "34232", + "34234", + "34241", + "34244", + "34248", + "34252", + "34254", + "34266", + "34270", + "34271", + "34278", + "34279", + "34280", + "34284", + "34305", + "34306", + "34310", + "34311", + "34326", + "34361", + "34362", + "34363", + "34367", + "34368", + "34369", + "34383", + "34385", + "34394", + "34397", + "34401", + "34402", + "34403", + "34404", + "34428", + "34440", + "34445", + "34450", + "34456", + "34459", + "34460", + "34461", + "34467", + "34481", + "34482", + "34485", + "34486", + "34496", + "34497", + "34500", + "34501", + "34504", + "34506", + "34507", + "34514", + "34520", + "34533", + "34541", + "34548", + "34551", + "34552", + "34559", + "34560", + "34569", + "34573", + "34589", + "34595", + "34599", + "34606", + "34611", + "34614", + "34620", + "34628", + "34630", + "34631", + "34633", + "34641", + "34650", + "34656", + "34659", + "34679", + "34684", + "34687", + "34688", + "34698", + "34706", + "34708", + "34721", + "34723", + "34728", + "34730", + "34731", + "34739", + "34749", + "34754", + "34758", + "34761", + "34764", + "34774", + "34775", + "34783", + "34794", + "34796", + "34806", + "34809", + "34820", + "34821", + "34825", + "34842", + "34850", + "34860", + "34873", + "34876", + "34879", + "34880", + "34881", + "34892", + "34893", + "34894", + "34895", + "34912", + "34913", + "34916", + "34918", + "34925", + "34931", + "34932", + "34933", + "34937", + "34940", + "34947", + "34948", + "34951", + "34957", + "34958", + "34960", + "34967", + "34969", + "34970", + "34989", + "34995", + "34997", + "35002", + "35005", + "35022", + "35023", + "35044", + "35045", + "35046", + "35051", + "35061", + "35086", + "35089", + "35092", + "35095", + "35106", + "35113", + "35128", + "35132", + "35142", + "35146", + "35147", + "35159", + "35161", + "35167", + "35174", + "35184", + "35192", + "35196", + "35224", + "35227", + "35237", + "35241", + "35242", + "35256", + "35264", + "35270", + "35274", + "35279", + "35282", + "35296", + "35297", + "35302", + "35306", + "35308", + "35312", + "35313", + "35317", + "35318", + "35326", + "35334", + "35341", + "35352", + "35353", + "35355", + "35356", + "35360", + "35362", + "35375", + "35379", + "35382", + "35385", + "35400", + "35408", + "35415", + "35428", + "35431", + "35432", + "35451", + "35454", + "35455", + "35458", + "35466", + "35467", + "35479", + "35481", + "35484", + "35487", + "35490", + "35492", + "35499", + "35501", + "35510", + "35514", + "35522", + "35526", + "35529", + "35530", + "35536", + "35540", + "35542", + "35549", + "35555", + "35559", + "35561", + "35563", + "35564", + "35565", + "35566", + "35575", + "35577", + "35580", + "35585", + "35587", + "35589", + "35591", + "35595", + "35610", + "35617", + "35622", + "35636", + "35640", + "35650", + "35653", + "35658", + "35660", + "35661", + "35669", + "35673", + "35674", + "35676", + "35682", + "35683", + "35686", + "35687", + "35689", + "35691", + "35692", + "35693", + "35697", + "35701", + "35705", + "35711", + "35713", + "35728", + "35735", + "35738", + "35739", + "35746", + "35750", + "35754", + "35757", + "35780", + "35784", + "35813", + "35822", + "35827", + "35828", + "35829", + "35831", + "35833", + "35841", + "35853", + "35854", + "35861", + "35862", + "35864", + "35866", + "35869", + "35871", + "35883", + "35888", + "35890", + "35892", + "35894", + "35895", + "35897", + "35898", + "35899", + "35903", + "35908", + "35910", + "35915", + "35922", + "35939", + "35950", + "35965", + "35968", + "35990", + "35992", + "35993", + "36018", + "36021", + "36035", + "36036", + "36043", + "36046", + "36050", + "36051", + "36056", + "36088", + "36090", + "36096", + "36101", + "36104", + "36119", + "36125", + "36127", + "36136", + "36145", + "36148", + "36150", + "36155", + "36169", + "36184", + "36195", + "36198", + "36203", + "36204", + "36214", + "36219", + "36224", + "36226", + "36258", + "36260", + "36265", + "36267", + "36270", + "36274", + "36279", + "36282", + "36286", + "36289", + "36303", + "36304", + "36312", + "36321", + "36323", + "36326", + "36329", + "36335", + "36352", + "36353", + "36362", + "36367", + "36382", + "36400", + "36405", + "36410", + "36415", + "36424", + "36425", + "36427", + "36446", + "36449", + "36453", + "36456", + "36457", + "36458", + "36468", + "36472", + "36473", + "36476", + "36486", + "36490", + "36498", + "36500", + "36505", + "36507", + "36511", + "36522", + "36529", + "36532", + "36533", + "36562", + "36564", + "36566", + "36573", + "36574", + "36575", + "36586", + "36588", + "36598", + "36605", + "36607", + "36610", + "36612", + "36613", + "36614", + "36616", + "36619", + "36625", + "36629", + "36660", + "36661", + "36669", + "36670", + "36676", + "36679", + "36695", + "36698", + "36699", + "36702", + "36710", + "36712", + "36718", + "36719", + "36728", + "36729", + "36747", + "36750", + "36753", + "36754", + "36755", + "36770", + "36773", + "36776", + "36780", + "36785", + "36788", + "36791", + "36797", + "36803", + "36812", + "36818", + "36833", + "36849", + "36862", + "36865", + "36866", + "36870", + "36888", + "36899", + "36900", + "36901", + "36905", + "36907", + "36912", + "36924", + "36931", + "36942", + "36948", + "36956", + "36958", + "36971", + "36984", + "36986", + "36994", + "36995", + "36997", + "36998", + "37005", + "37007", + "37010", + "37015", + "37017", + "37018", + "37028", + "37035", + "37046", + "37054", + "37055", + "37056", + "37067", + "37071", + "37077", + "37087", + "37090", + "37092", + "37096", + "37102", + "37107", + "37113", + "37120", + "37140", + "37144", + "37145", + "37172", + "37182", + "37187", + "37188", + "37194", + "37199", + "37200", + "37207", + "37225", + "37241", + "37242", + "37249", + "37258", + "37259", + "37265", + "37267", + "37272", + "37277", + "37279", + "37280", + "37293", + "37304", + "37310", + "37313", + "37315", + "37319", + "37322", + "37323", + "37327", + "37333", + "37335", + "37339", + "37341", + "37344", + "37349", + "37351", + "37355", + "37361", + "37363", + "37385", + "37406", + "37411", + "37414", + "37417", + "37423", + "37427", + "37428", + "37435", + "37436", + "37439", + "37440", + "37441", + "37442", + "37453", + "37457", + "37471", + "37475", + "37476", + "37477", + "37497", + "37507", + "37517", + "37519", + "37524", + "37527", + "37530", + "37533", + "37534", + "37539", + "37540", + "37541", + "37545", + "37546", + "37550", + "37568", + "37570", + "37571", + "37575", + "37581", + "37585", + "37588", + "37610", + "37614", + "37615", + "37619", + "37626", + "37635", + "37636", + "37637", + "37638", + "37664", + "37666", + "37683", + "37686", + "37688", + "37698", + "37705", + "37711", + "37713", + "37716", + "37718", + "37721", + "37722", + "37737", + "37748", + "37750", + "37753", + "37759", + "37761", + "37762", + "37766", + "37767", + "37775", + "37782", + "37784", + "37786", + "37792", + "37795", + "37800", + "37804", + "37817", + "37820", + "37828", + "37837", + "37847", + "37853", + "37858", + "37859", + "37865", + "37876", + "37879", + "37883", + "37884", + "37887", + "37888", + "37894", + "37896", + "37900", + "37912", + "37917", + "37925", + "37926", + "37933", + "37935", + "37946", + "37959", + "37967", + "37980", + "37981", + "37983", + "37987", + "37997", + "38007", + "38009", + "38015", + "38027", + "38038", + "38042", + "38076", + "38084", + "38088", + "38093", + "38105", + "38107", + "38119", + "38124", + "38128", + "38129", + "38138", + "38140", + "38154", + "38165", + "38171", + "38172", + "38173", + "38176", + "38180", + "38189", + "38200", + "38207", + "38210", + "38213", + "38221", + "38222", + "38226", + "38239", + "38251", + "38270", + "38276", + "38282", + "38291", + "38297", + "38305", + "38308", + "38314", + "38318", + "38346", + "38372", + "38373", + "38380", + "38381", + "38382", + "38393", + "38394", + "38404", + "38406", + "38409", + "38410", + "38411", + "38413", + "38424", + "38425", + "38426", + "38428", + "38429", + "38431", + "38432", + "38454", + "38455", + "38456", + "38463", + "38466", + "38470", + "38471", + "38475", + "38476", + "38480", + "38482", + "38488", + "38491", + "38494", + "38495", + "38501", + "38506", + "38536", + "38541", + "38542", + "38548", + "38549", + "38553", + "38557", + "38562", + "38565", + "38573", + "38579", + "38585", + "38587", + "38600", + "38607", + "38625", + "38637", + "38646", + "38648", + "38657", + "38659", + "38664", + "38665", + "38675", + "38676", + "38680", + "38684", + "38693", + "38698", + "38699", + "38704", + "38706", + "38707", + "38710", + "38711", + "38716", + "38722", + "38727", + "38734", + "38741", + "38743", + "38745", + "38749", + "38757", + "38760", + "38781", + "38784", + "38786", + "38788", + "38789", + "38810", + "38824", + "38835", + "38838", + "38851", + "38852", + "38857", + "38867", + "38871", + "38875", + "38877", + "38884", + "38885", + "38888", + "38890", + "38893", + "38900", + "38911", + "38914", + "38922", + "38931", + "38937", + "38941", + "38942", + "38943", + "38945", + "38956", + "38961", + "38970", + "38974", + "38979", + "38987", + "38988", + "38994", + "39007", + "39021", + "39022", + "39029", + "39033", + "39036", + "39045", + "39048", + "39049", + "39052", + "39054", + "39056", + "39062", + "39065", + "39069", + "39072", + "39075", + "39077", + "39078", + "39081", + "39082", + "39090", + "39091", + "39092", + "39093", + "39094", + "39095", + "39097", + "39099", + "39100", + "39102", + "39107", + "39123", + "39129", + "39130", + "39131", + "39151", + "39153", + "39154", + "39158", + "39159", + "39165", + "39166", + "39175", + "39178", + "39180", + "39184", + "39202", + "39203", + "39205", + "39206", + "39208", + "39215", + "39223", + "39230", + "39236", + "39238", + "39239", + "39248", + "39275", + "39287", + "39291", + "39296", + "39301", + "39303", + "39305", + "39307", + "39320", + "39321", + "39323", + "39340", + "39341", + "39351", + "39368", + "39369", + "39373", + "39379", + "39385", + "39387", + "39404", + "39406", + "39410", + "39411", + "39419", + "39424", + "39425", + "39426", + "39427", + "39428", + "39431", + "39436", + "39439", + "39443", + "39455", + "39457", + "39468", + "39472", + "39474", + "39480", + "39497", + "39500", + "39511", + "39513", + "39516", + "39529", + "39535", + "39538", + "39554", + "39555", + "39556", + "39561", + "39566", + "39570", + "39573", + "39575", + "39608", + "39613", + "39614", + "39618", + "39619", + "39622", + "39626", + "39631", + "39638", + "39640", + "39641", + "39649", + "39653", + "39654", + "39658", + "39674", + "39676", + "39678", + "39697", + "39718", + "39723", + "39724", + "39729", + "39731", + "39736", + "39737", + "39740", + "39745", + "39747", + "39752", + "39756", + "39760", + "39761", + "39764", + "39765", + "39787", + "39789", + "39790", + "39791", + "39793", + "39794", + "39798", + "39801", + "39802", + "39805", + "39806", + "39815", + "39817", + "39822", + "39826", + "39830", + "39832", + "39850", + "39855", + "39870", + "39871", + "39878", + "39886", + "39887", + "39889", + "39890", + "39893", + "39912", + "39913", + "39921", + "39928", + "39944", + "39947", + "39955", + "39961", + "39964", + "39966", + "39969", + "39970", + "39973", + "39979", + "40014", + "40015", + "40022", + "40038", + "40041", + "40042", + "40053", + "40055", + "40056", + "40058", + "40060", + "40063", + "40068", + "40070", + "40091", + "40093", + "40096", + "40101", + "40117", + "40122", + "40127", + "40128", + "40131", + "40134", + "40138", + "40140", + "40143", + "40144", + "40164", + "40167", + "40169", + "40170", + "40177", + "40178", + "40180", + "40190", + "40193", + "40197", + "40200", + "40201", + "40202", + "40208", + "40213", + "40218", + "40224", + "40243", + "40247", + "40250", + "40252", + "40253", + "40263", + "40266", + "40268", + "40276", + "40277", + "40282", + "40294", + "40296", + "40299", + "40308", + "40321", + "40333", + "40348", + "40350", + "40353", + "40355", + "40358", + "40362", + "40367", + "40375", + "40377", + "40393", + "40394", + "40401", + "40408", + "40415", + "40416", + "40421", + "40424", + "40436", + "40442", + "40450", + "40457", + "40468", + "40470", + "40474", + "40478", + "40483", + "40498", + "40506", + "40525", + "40534", + "40535", + "40536", + "40539", + "40543", + "40548", + "40556", + "40561", + "40574", + "40575", + "40584", + "40587", + "40590", + "40592", + "40604", + "40607", + "40609", + "40619", + "40626", + "40651", + "40656", + "40660", + "40669", + "40674", + "40677", + "40686", + "40689", + "40691", + "40699", + "40702", + "40712", + "40715", + "40716", + "40723", + "40731", + "40757", + "40761", + "40773", + "40777", + "40782", + "40788", + "40795", + "40804", + "40818", + "40819", + "40821", + "40827", + "40828", + "40829", + "40837", + "40840", + "40841", + "40842", + "40845", + "40849", + "40850", + "40853", + "40864", + "40870", + "40874", + "40875", + "40881", + "40887", + "40889", + "40894", + "40897", + "40901", + "40906", + "40907", + "40918", + "40922", + "40924", + "40926", + "40931", + "40946", + "40952", + "40965", + "40968", + "40974", + "40975", + "40989", + "40995", + "40997", + "41003", + "41004", + "41005", + "41009", + "41012", + "41019", + "41020", + "41034", + "41037", + "41039", + "41044", + "41054", + "41064", + "41069", + "41072", + "41079", + "41083", + "41094", + "41096", + "41108", + "41122", + "41129", + "41132", + "41134", + "41156", + "41158", + "41160", + "41181", + "41193", + "41198", + "41202", + "41204", + "41210", + "41212", + "41214", + "41223", + "41226", + "41233", + "41261", + "41265", + "41270", + "41279", + "41285", + "41292", + "41293", + "41294", + "41299", + "41304", + "41313", + "41314", + "41322", + "41338", + "41345", + "41347", + "41349", + "41350", + "41352", + "41354", + "41355", + "41358", + "41359", + "41365", + "41377", + "41392", + "41398", + "41402", + "41405", + "41411", + "41412", + "41420", + "41422", + "41429", + "41434", + "41449", + "41452", + "41453", + "41456", + "41459", + "41460", + "41467", + "41470", + "41474", + "41480", + "41481", + "41483", + "41485", + "41490", + "41499", + "41500", + "41501", + "41506", + "41514", + "41516", + "41523", + "41528", + "41543", + "41547", + "41549", + "41555", + "41556", + "41558", + "41565", + "41572", + "41573", + "41576", + "41579", + "41581", + "41588", + "41605", + "41625", + "41627", + "41633", + "41637", + "41638", + "41643", + "41645", + "41650", + "41653", + "41665", + "41666", + "41667", + "41668", + "41670", + "41678", + "41685", + "41691", + "41693", + "41695", + "41696", + "41699", + "41717", + "41728", + "41729", + "41736", + "41748", + "41771", + "41775", + "41795", + "41797", + "41806", + "41811", + "41814", + "41826", + "41834", + "41838", + "41843", + "41848", + "41849", + "41852", + "41858", + "41860", + "41872", + "41874", + "41876", + "41882", + "41888", + "41895", + "41899", + "41900", + "41908", + "41912", + "41917", + "41920", + "41922", + "41931", + "41942", + "41949", + "41950", + "41955", + "41960", + "41965", + "41972", + "41976", + "41982", + "41989", + "42000", + "42009", + "42012", + "42014", + "42016", + "42022", + "42026", + "42028", + "42047", + "42052", + "42069", + "42070", + "42071", + "42077", + "42078", + "42081", + "42087", + "42089", + "42091", + "42118", + "42122", + "42126", + "42130", + "42138", + "42144", + "42147", + "42153", + "42164", + "42166", + "42168", + "42169", + "42179", + "42181", + "42187", + "42193", + "42200", + "42205", + "42211", + "42212", + "42215", + "42217", + "42231", + "42236", + "42244", + "42256", + "42265", + "42275", + "42281", + "42288", + "42294", + "42297", + "42304", + "42309", + "42310", + "42311", + "42312", + "42313", + "42318", + "42325", + "42332", + "42335", + "42338", + "42342", + "42345", + "42346", + "42355", + "42363", + "42366", + "42368", + "42369", + "42371", + "42372", + "42385", + "42387", + "42418", + "42419", + "42423", + "42425", + "42428", + "42434", + "42440", + "42444", + "42448", + "42454", + "42458", + "42465", + "42472", + "42475", + "42477", + "42486", + "42488", + "42495", + "42499", + "42512", + "42513", + "42514", + "42515", + "42523", + "42526", + "42527", + "42531", + "42534", + "42540", + "42542", + "42549", + "42550", + "42555", + "42561", + "42569", + "42580", + "42582", + "42588", + "42592", + "42598", + "42600", + "42615", + "42617", + "42626", + "42636", + "42648", + "42666", + "42681", + "42686", + "42706", + "42710", + "42719", + "42720", + "42723", + "42736", + "42747", + "42750", + "42757", + "42758", + "42759", + "42774", + "42777", + "42779", + "42782", + "42792", + "42793", + "42816", + "42823", + "42833", + "42873", + "42884", + "42888", + "42893", + "42898", + "42905", + "42906", + "42909", + "42910", + "42912", + "42920", + "42921", + "42922", + "42926", + "42928", + "42933", + "42938", + "42947", + "42948", + "42952", + "42955", + "42987", + "43000", + "43010", + "43016", + "43028", + "43031", + "43052", + "43054", + "43055", + "43060", + "43066", + "43067", + "43074", + "43078", + "43079", + "43088", + "43091", + "43099", + "43101", + "43107", + "43108", + "43112", + "43114", + "43126", + "43136", + "43147", + "43169", + "43170", + "43182", + "43189", + "43202", + "43204", + "43212", + "43217", + "43228", + "43233", + "43235", + "43240", + "43243", + "43262", + "43264", + "43265", + "43272", + "43279", + "43288", + "43289", + "43291", + "43309", + "43311", + "43324", + "43331", + "43335", + "43338", + "43350", + "43357", + "43364", + "43372", + "43380", + "43381", + "43382", + "43385", + "43392", + "43393", + "43395", + "43399", + "43400", + "43401", + "43402", + "43412", + "43427", + "43428", + "43432", + "43443", + "43446", + "43450", + "43454", + "43457", + "43462", + "43467", + "43469", + "43470", + "43486", + "43488", + "43491", + "43494", + "43500", + "43505", + "43521", + "43522", + "43523", + "43527", + "43532", + "43538", + "43562", + "43564", + "43565", + "43571", + "43574", + "43581", + "43582", + "43588", + "43591", + "43592", + "43597", + "43601", + "43602", + "43604", + "43606", + "43607", + "43612", + "43628", + "43634", + "43644", + "43653", + "43654", + "43667", + "43676", + "43688", + "43689", + "43695", + "43710", + "43711", + "43713", + "43716", + "43717", + "43723", + "43733", + "43742", + "43751", + "43760", + "43771", + "43778", + "43783", + "43791", + "43798", + "43802", + "43805", + "43806", + "43819", + "43821", + "43825", + "43833", + "43837", + "43839", + "43854", + "43856", + "43859", + "43862", + "43864", + "43866", + "43870", + "43872", + "43874", + "43879", + "43887", + "43890", + "43897", + "43900", + "43908", + "43911", + "43915", + "43920", + "43928", + "43934", + "43938", + "43943", + "43946", + "43949", + "43955", + "43956", + "43960", + "43974", + "43982", + "43999", + "44007", + "44022", + "44026", + "44040", + "44042", + "44044", + "44045", + "44053", + "44054", + "44056", + "44057", + "44060", + "44061", + "44066", + "44078", + "44079", + "44084", + "44087", + "44096", + "44100", + "44102", + "44114", + "44130", + "44134", + "44135", + "44156", + "44163", + "44169", + "44172", + "44174", + "44187", + "44192", + "44200", + "44201", + "44202", + "44203", + "44216", + "44217", + "44220", + "44223", + "44224", + "44227", + "44230", + "44238", + "44242", + "44243", + "44244", + "44247", + "44255", + "44268", + "44269", + "44275", + "44278", + "44279", + "44281", + "44285", + "44286", + "44289", + "44294", + "44301", + "44307", + "44318", + "44319", + "44320", + "44334", + "44338", + "44339", + "44342", + "44350", + "44353", + "44354", + "44356", + "44362", + "44366", + "44367", + "44373", + "44374", + "44377", + "44390", + "44394", + "44400", + "44402", + "44405", + "44410", + "44415", + "44427", + "44429", + "44435", + "44441", + "44446", + "44458", + "44465", + "44467", + "44469", + "44471", + "44473", + "44480", + "44483", + "44496", + "44498", + "44508", + "44510", + "44515", + "44523", + "44524", + "44536", + "44555", + "44556", + "44559", + "44560", + "44561", + "44562", + "44569", + "44570", + "44574", + "44580", + "44587", + "44603", + "44608", + "44613", + "44617", + "44619", + "44624", + "44625", + "44629", + "44636", + "44638", + "44640", + "44641", + "44648", + "44654", + "44656", + "44663", + "44673", + "44691", + "44705", + "44708", + "44717", + "44748", + "44761", + "44762", + "44770", + "44772", + "44775", + "44778", + "44780", + "44784", + "44786", + "44787", + "44803", + "44811", + "44818", + "44829", + "44831", + "44833", + "44837", + "44849", + "44851", + "44852", + "44857", + "44858", + "44859", + "44861", + "44862", + "44870", + "44875", + "44882", + "44887", + "44893", + "44897", + "44898", + "44905", + "44909", + "44915", + "44916", + "44917", + "44918", + "44934", + "44936", + "44937", + "44938", + "44940", + "44949", + "44953", + "44959", + "44964", + "44972", + "44973", + "44974", + "44978", + "44984", + "44992", + "44995", + "44997", + "45020", + "45024", + "45028", + "45031", + "45048", + "45051", + "45068", + "45071", + "45076", + "45077", + "45079", + "45080", + "45087", + "45088", + "45099", + "45102", + "45104", + "45116", + "45122", + "45128", + "45136", + "45145", + "45150", + "45151", + "45158", + "45168", + "45170", + "45173", + "45179", + "45182", + "45183", + "45184", + "45185", + "45189", + "45207", + "45208", + "45210", + "45220", + "45231", + "45261", + "45264", + "45266", + "45269", + "45271", + "45289", + "45291", + "45295", + "45296", + "45309", + "45315", + "45316", + "45329", + "45345", + "45347", + "45350", + "45353", + "45364", + "45365", + "45366", + "45367", + "45370", + "45377", + "45378", + "45381", + "45388", + "45390", + "45398", + "45409", + "45412", + "45415", + "45425", + "45430", + "45446", + "45453", + "45455", + "45463", + "45475", + "45478", + "45490", + "45497", + "45499", + "45500", + "45503", + "45514", + "45523", + "45532", + "45537", + "45539", + "45540", + "45541", + "45542", + "45551", + "45563", + "45566", + "45570", + "45577", + "45582", + "45586", + "45605", + "45611", + "45614", + "45619", + "45625", + "45628", + "45630", + "45632", + "45635", + "45637", + "45638", + "45639", + "45644", + "45648", + "45649", + "45661", + "45667", + "45668", + "45671", + "45675", + "45691", + "45695", + "45703", + "45705", + "45707", + "45708", + "45715", + "45718", + "45719", + "45726", + "45729", + "45730", + "45731", + "45736", + "45741", + "45747", + "45755", + "45759", + "45761", + "45768", + "45769", + "45770", + "45771", + "45777", + "45781", + "45786", + "45802", + "45810", + "45813", + "45818", + "45821", + "45833", + "45835", + "45846", + "45848", + "45853", + "45871", + "45888", + "45890", + "45896", + "45897", + "45905", + "45909", + "45911", + "45915", + "45917", + "45919", + "45923", + "45925", + "45928", + "45930", + "45944", + "45950", + "45958", + "45959", + "45966", + "45967", + "45972", + "45976", + "45984", + "45987", + "45988", + "45992", + "45995", + "45997", + "46006", + "46009", + "46011", + "46019", + "46020", + "46022", + "46024", + "46030", + "46038", + "46042", + "46055", + "46058", + "46063", + "46067", + "46070", + "46071", + "46073", + "46078", + "46081", + "46089", + "46090", + "46092", + "46101", + "46105", + "46113", + "46118", + "46124", + "46131", + "46133", + "46139", + "46142", + "46144", + "46147", + "46158", + "46159", + "46161", + "46162", + "46164", + "46167", + "46179", + "46181", + "46182", + "46187", + "46214", + "46216", + "46218", + "46220", + "46232", + "46233", + "46246", + "46247", + "46248", + "46249", + "46251", + "46256", + "46264", + "46268", + "46279", + "46286", + "46292", + "46299", + "46301", + "46302", + "46311", + "46316", + "46325", + "46327", + "46333", + "46338", + "46342", + "46344", + "46351", + "46366", + "46369", + "46378", + "46380", + "46381", + "46382", + "46383", + "46388", + "46395", + "46408", + "46415", + "46417", + "46421", + "46422", + "46426", + "49162", + "49168", + "49169", + "49170", + "49178", + "49185", + "49186", + "49191", + "49194", + "49196", + "49198", + "49210", + "49218", + "49219", + "49223", + "49228", + "49239", + "49243", + "49249", + "49260", + "49267", + "49272", + "49278", + "49286", + "49297", + "49305", + "49306", + "49308", + "49319", + "49323", + "49327", + "49333", + "49341", + "49343", + "49344", + "49347", + "49356", + "49367", + "49369", + "49371", + "49396", + "49399", + "49401", + "49404", + "49405", + "49413", + "49416", + "49422", + "49426", + "49431", + "49434", + "49444", + "49445", + "49453", + "49459", + "49465", + "49468", + "49469", + "49480", + "49482", + "49491", + "49493", + "49503", + "49504", + "49506", + "49509", + "49511", + "49522", + "49525", + "49533", + "49538", + "49543", + "49561", + "49572", + "49576", + "49577", + "49579", + "49580", + "49585", + "49587", + "49593", + "49599", + "49609", + "49613", + "49618", + "49622", + "49636", + "49637", + "49645", + "49657", + "49683", + "49685", + "49695", + "49703", + "49708", + "49709", + "49720", + "49733", + "49737", + "49748", + "49754", + "49755", + "49761", + "49775", + "49776", + "49783", + "49798", + "49801", + "49808", + "49812", + "49815", + "49828", + "49833", + "49840", + "49841", + "49844", + "49849", + "49857", + "49861", + "49864", + "49866", + "49876", + "49890", + "49904", + "49914", + "49922", + "49931", + "49947", + "49951", + "49953", + "49964", + "49965", + "49972", + "49973", + "49978", + "49986", + "49996", + "50002", + "50007", + "50013", + "50017", + "50018", + "50034", + "50035", + "50037", + "50054", + "50063", + "50080", + "50081", + "50084", + "50098", + "50105", + "50107", + "50109", + "50110", + "50121", + "50123", + "50127", + "50138", + "50145", + "50147", + "50148", + "50154", + "50155", + "50160", + "50162", + "50166", + "50173", + "50181", + "50187", + "50188", + "50203", + "50213", + "50220", + "50229", + "50241", + "50247", + "50254", + "50268", + "50276", + "50289", + "50292", + "50299", + "50314", + "50320", + "50325", + "50346", + "50352", + "50353", + "50361", + "50368", + "50369", + "50372", + "50374", + "50378", + "50407", + "50408", + "50410", + "50418", + "50420", + "50425", + "50426", + "50432", + "50435", + "50440", + "50450", + "50451", + "50455", + "50463", + "50468", + "50472", + "50475", + "50482", + "50488", + "50497", + "50501", + "50503", + "50504", + "50519", + "50521", + "50528", + "50537", + "50540", + "50542", + "50545", + "50554", + "50559", + "50564", + "50566", + "50571", + "50575", + "50579", + "50590", + "50599", + "50603", + "50620", + "50624", + "50626", + "50637", + "50639", + "50640", + "50645", + "50649", + "50651", + "50663", + "50669", + "50687", + "50692", + "50695", + "50703", + "50712", + "50721", + "50724", + "50734", + "50743", + "50744", + "50762", + "50764", + "50767", + "50769", + "50773", + "50775", + "50776", + "50780", + "50792", + "50794", + "50803", + "50808", + "50810", + "50814", + "50817", + "50819", + "50824", + "50828", + "50832", + "50834", + "50852", + "50861", + "50867", + "50873", + "50875", + "50882", + "50899", + "50904", + "50909", + "50913", + "50921", + "50925", + "50927", + "50930", + "50936", + "50942", + "50944", + "50947", + "50952", + "50953", + "50961", + "50962", + "50975", + "50978", + "50981", + "50987", + "50994", + "51004", + "51008", + "51010", + "51011", + "51022", + "51024", + "51028", + "51032", + "51033", + "51034", + "51040", + "51041", + "51048", + "51050", + "51054", + "51070", + "51071", + "51078", + "51086", + "51087", + "51093", + "51094", + "51097", + "51110", + "51112", + "51114", + "51116", + "51117", + "51121", + "51122", + "51124", + "51132", + "51136", + "51138", + "51149", + "51156", + "51179", + "51198", + "51201", + "51202", + "51204", + "51210", + "51213", + "51217", + "51218", + "51220", + "51222", + "51228", + "51229", + "51241", + "51252", + "51261", + "51263", + "51268", + "51291", + "51292", + "51301", + "51311", + "51314", + "51316", + "51327", + "51348", + "51363", + "51371", + "51372", + "51378", + "51379", + "51384", + "51388", + "51389", + "51391", + "51400", + "51402", + "51411", + "51424", + "51425", + "51426", + "51429", + "51430", + "51435", + "51438", + "51447", + "51453", + "51459", + "51464", + "51465", + "51469", + "51476", + "51478", + "51481", + "51487", + "51493", + "51494", + "51497", + "51501", + "51503", + "51508", + "51513", + "51520", + "51523", + "51529", + "51533", + "51535", + "51537", + "51538", + "51547", + "51554", + "51559", + "51567", + "51586", + "51588", + "51589", + "51598", + "51605", + "51611", + "51616", + "51621", + "51626", + "51628", + "51634", + "51641", + "51648", + "51649", + "51671", + "51681", + "51688", + "51692", + "51700", + "51702", + "51713", + "51719", + "51723", + "51729", + "51732", + "51733", + "51748", + "51751", + "51755", + "51764", + "51769", + "51772", + "51773", + "51777", + "51778", + "51780", + "51789", + "51792", + "51803", + "51806", + "51817", + "51825", + "51833", + "51835", + "51836", + "51841", + "51847", + "51849", + "51852", + "51855", + "51856", + "51859", + "51861", + "51863", + "51864", + "51872", + "51877", + "51881", + "51887", + "51892", + "51897", + "51904", + "51906", + "51908", + "51912", + "51917", + "51926", + "51928", + "51929", + "51948", + "51951", + "51964", + "51971", + "51972", + "51973", + "51974", + "51975", + "51990", + "51992", + "51996", + "52000", + "52013", + "52021", + "52026", + "52030", + "52036", + "52039", + "52058", + "52060", + "52064", + "52070", + "52081", + "52082", + "52089", + "52092", + "52097", + "52104", + "52106", + "52116", + "52121", + "52122", + "52127", + "52133", + "52134", + "52140", + "52148", + "52152", + "52156", + "52161", + "52162", + "52167", + "52169", + "52173", + "52192", + "52193", + "52196", + "52209", + "52218", + "52228", + "52249", + "52253", + "52260", + "52261", + "52267", + "52269", + "52271", + "52272", + "52273", + "52288", + "52290", + "52301", + "52305", + "52306", + "52313", + "52315", + "52319", + "52322", + "52330", + "52342", + "52346", + "52351", + "52354", + "52363", + "52382", + "52386", + "52390", + "52392", + "52409", + "52427", + "52428", + "52436", + "52459", + "52462", + "52465", + "52485", + "52488", + "52500", + "52502", + "52506", + "52511", + "52516", + "52518", + "52520", + "52524", + "52525", + "52530", + "52548", + "52554", + "52555", + "52563", + "52572", + "52578", + "52584", + "52586", + "52587", + "52589", + "52591", + "52593", + "52609", + "52615", + "52617", + "52623", + "52628", + "52629", + "52631", + "52640", + "52648", + "52649", + "52651", + "52658", + "52670", + "52673", + "52676", + "52681", + "52686", + "52690", + "52698", + "52699", + "52710", + "52712", + "52729", + "52734", + "52742", + "52753", + "52755", + "52763", + "52770", + "52779", + "52781", + "52790", + "52793", + "52802", + "52804", + "52808", + "52817", + "52821", + "52834", + "52835", + "52837", + "52857", + "52858", + "52860", + "52863", + "52872", + "52873", + "52874", + "52878", + "52880", + "52890", + "52893", + "52907", + "52908", + "52911", + "52914", + "52925", + "52930", + "52931", + "52932", + "52936", + "52945", + "52961", + "52966", + "52967", + "52974", + "52976", + "52978", + "52981", + "52983", + "53002", + "53010", + "53022", + "53025", + "53028", + "53029", + "53030", + "53034", + "53039", + "53041", + "53042", + "53059", + "53066", + "53078", + "53081", + "53086", + "53087", + "53089", + "53093", + "53097", + "53099", + "53104", + "53114", + "53115", + "53116", + "53119", + "53121", + "53140", + "53145", + "53162", + "53172", + "53175", + "53180", + "53188", + "53190", + "53202", + "53203", + "53211", + "53212", + "53214", + "53221", + "53223", + "53233", + "53238", + "53239", + "53240", + "53242", + "53251", + "53252", + "53254", + "53255", + "53274", + "53290", + "53292", + "53294", + "53298", + "53301", + "53307", + "53313", + "53323", + "53334", + "53343", + "53367", + "53376", + "53382", + "53383", + "53392", + "53397", + "53405", + "53406", + "53408", + "53418", + "53419", + "53422", + "53423", + "53426", + "53428", + "53430", + "53432", + "53436", + "53443", + "53446", + "53451", + "53463", + "53464", + "53466", + "53469", + "53472", + "53474", + "53477", + "53492", + "53494", + "53497", + "53500", + "53509", + "53510", + "53515", + "53518", + "53535", + "53540", + "53550", + "53554", + "53569", + "53575", + "53582", + "53588", + "53609", + "53615", + "53617", + "53624", + "53629", + "53642", + "53647", + "53648", + "53654", + "53656", + "53657", + "53658", + "53659", + "53663", + "53673", + "53678", + "53680", + "53682", + "53686", + "53701", + "53703", + "53706", + "53711", + "53712", + "53729", + "53731", + "53734", + "53750", + "53763", + "53772", + "53777", + "53781", + "53786", + "53791", + "53796", + "53798", + "53803", + "53818", + "53823", + "53830", + "53832", + "53845", + "53847", + "53852", + "53858", + "53861", + "53867", + "53870", + "53879", + "53881", + "53884", + "53889", + "53895", + "53904", + "53918", + "53921", + "53925", + "53928", + "53930", + "53932", + "53933", + "53950", + "53955", + "53962", + "53963", + "53969", + "53972", + "53986", + "53992", + "53996", + "54024", + "54027", + "54029", + "54030", + "54032", + "54033", + "54035", + "54044", + "54047", + "54048", + "54049", + "54066", + "54067", + "54068", + "54072", + "54076", + "54078", + "54082", + "54086", + "54095", + "54109", + "54127", + "54132", + "54140", + "54141", + "54145", + "54148", + "54149", + "54155", + "54165", + "54187", + "54192", + "54194", + "54204", + "54213", + "54218", + "54225", + "54232", + "54251", + "54255", + "54259", + "54262", + "54270", + "54276", + "54279", + "54282", + "54285", + "54287", + "54293", + "54298", + "54301", + "54303", + "54304", + "54308", + "54312", + "54319", + "54334", + "54345", + "54348", + "54353", + "54354", + "54357", + "54361", + "54368", + "54374", + "54379", + "54383", + "54385", + "54392", + "54396", + "54397", + "54453", + "54462", + "54463", + "54467", + "54472", + "54481", + "54493", + "54495", + "54497", + "54499", + "54506", + "54511", + "54515", + "54523", + "54531", + "54532", + "54534", + "54535", + "54547", + "54549", + "54554", + "54565", + "54567", + "54580", + "54584", + "54585", + "54586", + "54599", + "54600", + "54601", + "54602", + "54607", + "54610", + "54615", + "54621", + "54628", + "54631", + "54636", + "54637", + "54640", + "54644", + "54645", + "54652", + "54655", + "54661", + "54669", + "54672", + "54676", + "54680", + "54689", + "54696", + "54700", + "54714", + "54716", + "54719", + "54721", + "54724", + "54729", + "54754", + "54756", + "54757", + "54762", + "54767", + "54769", + "54775", + "54776", + "54780", + "54787", + "54804", + "54812", + "54816", + "54837", + "54838", + "54842", + "54846", + "54847", + "54852", + "54863", + "54865", + "54869", + "54877", + "54888", + "54889", + "54891", + "54902", + "54905", + "54930", + "54931", + "54933", + "54939", + "54940", + "54948", + "54963", + "54964", + "54965", + "54967", + "54979", + "55003", + "55012", + "55016", + "55019", + "55022", + "55023", + "55024", + "55026", + "55038", + "55041", + "55043", + "55079", + "55096", + "55109", + "55116", + "55122", + "55123", + "55128", + "55134", + "55142", + "55145", + "55146", + "55147", + "55152", + "55165", + "55166", + "55182", + "55189", + "55190", + "55194", + "55200", + "55213", + "55222", + "55235", + "55250", + "55253", + "55254", + "55256", + "55261", + "55267", + "55269", + "55271", + "55278", + "55279", + "55281", + "55283", + "55296", + "55309", + "55310", + "55312", + "55315", + "55317", + "55329", + "55340", + "55346", + "55351", + "55352", + "55357", + "55364", + "55366", + "55371", + "55378", + "55379", + "55386", + "55391", + "55395", + "55397", + "55414", + "55419", + "55423", + "55437", + "55439", + "55443", + "55457", + "55465", + "55467", + "55470", + "55476", + "55480", + "55482", + "55503", + "55504", + "55514", + "55515", + "55523", + "55526", + "55537", + "55541", + "55544", + "55551", + "55565", + "55590", + "55592", + "55595", + "55627", + "55635", + "55638", + "55640", + "55642", + "55643", + "55644", + "55656", + "55661", + "55662", + "55668", + "55669", + "55672", + "55675", + "55689", + "55692", + "55715", + "55719", + "55720", + "55723", + "55725", + "55726", + "55728", + "55730", + "55733", + "55736", + "55737", + "55740", + "55751", + "55753", + "55759", + "55762", + "55767", + "55776", + "55785", + "55786", + "55805", + "55806", + "55807", + "55808", + "55822", + "55823", + "55824", + "55832", + "55852", + "55858", + "55860", + "55864", + "55869", + "55871", + "55873", + "55883", + "55884", + "55893", + "55895", + "55905", + "55912", + "55914", + "55923", + "55931", + "55932", + "55938", + "55940", + "55941", + "55942", + "55950", + "55955", + "55963", + "55973", + "55987", + "55991", + "56000", + "56002", + "56004", + "56009", + "56010", + "56013", + "56032", + "56035", + "56037", + "56038", + "56040", + "56057", + "56063", + "56064", + "56066", + "56067", + "56073", + "56074", + "56076", + "56086", + "56088", + "56094", + "56097", + "56110", + "56113", + "56114", + "56123", + "56124", + "56125", + "56142", + "56150", + "56161", + "56174", + "56178", + "56188", + "56191", + "56196", + "56198", + "56203", + "56204", + "56222", + "56227", + "56231", + "56233", + "56234", + "56239", + "56243", + "56244", + "56251", + "56262", + "56269", + "56273", + "56275", + "56276", + "56277", + "56279", + "56280", + "56281", + "56289", + "56301", + "56302", + "56304", + "56310", + "56320", + "56323", + "56333", + "56335", + "56338", + "56342", + "56348", + "56355", + "56357", + "56359", + "56360", + "56362", + "56363", + "56365", + "56376", + "56381", + "56383", + "56385", + "56395", + "56401", + "56405", + "56419", + "56421", + "56425", + "56426", + "56429", + "56433", + "56446", + "56449", + "56461", + "56464", + "56469", + "56474", + "56482", + "56484", + "56488", + "56494", + "56503", + "56504", + "56509", + "56510", + "56512", + "56515", + "56518", + "56520", + "56534", + "56536", + "56537", + "56539", + "56545", + "56546", + "56553", + "56555", + "56567", + "56577", + "56579", + "56589", + "56590", + "56594", + "56608", + "56612", + "56615", + "56630", + "56637", + "56644", + "56645", + "56650", + "56660", + "56670", + "56674", + "56682", + "56685", + "56686", + "56691", + "56692", + "56705", + "56708", + "56711", + "56712", + "56720", + "56724", + "56731", + "56739", + "56741", + "56751", + "56753", + "56766", + "56771", + "56778", + "56781", + "56788", + "56795", + "56796", + "56803", + "56807", + "56814", + "56816", + "56825", + "56836", + "56840", + "56845", + "56877", + "56878", + "56888", + "56890", + "56896", + "56901", + "56903", + "56906", + "56916", + "56921", + "56930", + "56937", + "56940", + "56944", + "56945", + "56949", + "56960", + "56962", + "56969", + "56970", + "56975", + "56976", + "56983", + "56986", + "56991", + "57001", + "57010", + "57016", + "57018", + "57029", + "57036", + "57039", + "57053", + "57058", + "57060", + "57065", + "57067", + "57069", + "57070", + "57073", + "57074", + "57081", + "57085", + "57097", + "57104", + "57123", + "57137", + "57145", + "57146", + "57148", + "57151", + "57166", + "57175", + "57176", + "57180", + "57183", + "57193", + "57198", + "57199", + "57201", + "57206", + "57216", + "57221", + "57223", + "57224", + "57229", + "57233", + "57237", + "57247", + "57253", + "57260", + "57263", + "57277", + "57281", + "57283", + "57288", + "57296", + "57302", + "57313", + "57315", + "57317", + "57322", + "57323", + "57328", + "57329", + "57350", + "57353", + "57358", + "57360", + "57361", + "57362", + "57366", + "57383", + "57392", + "57404", + "57419", + "57420", + "57433", + "57434", + "57435", + "57438", + "57444", + "57456", + "57468", + "57474", + "57480", + "57485", + "57489", + "57500", + "57510", + "57512", + "57532", + "57537", + "57550", + "57559", + "57560", + "57567", + "57572", + "57574", + "57575", + "57579", + "57583", + "57585", + "57586", + "57588", + "57592", + "57602", + "57604", + "57607", + "57612", + "57622", + "57623", + "57626", + "57636", + "57639", + "57640", + "57648", + "57658", + "57660", + "57670", + "57673", + "57674", + "57688", + "57689", + "57692", + "57702", + "57703", + "57707", + "57713", + "57718", + "57729", + "57733", + "57736", + "57744", + "57746", + "57751", + "57752", + "57756", + "57766", + "57771", + "57773", + "57776", + "57791", + "57792", + "57794", + "57804", + "57806", + "57811", + "57814", + "57824", + "57827", + "57829", + "57830", + "57831", + "57838", + "57840", + "57841", + "57843", + "57846", + "57848", + "57863", + "57870", + "57871", + "57877", + "57880", + "57889", + "57895", + "57897", + "57906", + "57915", + "57920", + "57930", + "57933", + "57934", + "57937", + "57938", + "57942", + "57950", + "57952", + "57955", + "57961", + "57964", + "57966", + "57974", + "57979", + "57986", + "57989", + "57996", + "58000", + "58007", + "58008", + "58016", + "58028", + "58040", + "58041", + "58042", + "58059", + "58068", + "58069", + "58080", + "58082", + "58090", + "58097", + "58101", + "58114", + "58116", + "58117", + "58119", + "58124", + "58130", + "58132", + "58137", + "58147", + "58155", + "58158", + "58159", + "58160", + "58165", + "58172", + "58178", + "58179", + "58181", + "58182", + "58187", + "58190", + "58216", + "58227", + "58229", + "58237", + "58248", + "58254", + "58259", + "58275", + "58282", + "58294", + "58297", + "58302", + "58311", + "58316", + "58318", + "58319", + "58321", + "58327", + "58356", + "58369", + "58381", + "58394", + "58395", + "58398", + "58403", + "58404", + "58421", + "58430", + "58434", + "58435", + "58448", + "58453", + "58455", + "58466", + "58469", + "58478", + "58480", + "58486", + "58495", + "58497", + "58499", + "58503", + "58505", + "58507", + "58513", + "58522", + "58523", + "58524", + "58533", + "58535", + "58540", + "58543", + "58551", + "58552", + "58560", + "58586", + "58593", + "58601", + "58602", + "58603", + "58614", + "58618", + "58638", + "58640", + "58644", + "58646", + "58647", + "58654", + "58655", + "58656", + "58658", + "58676", + "58677", + "58678", + "58687", + "58690", + "58692", + "58694", + "58700", + "58706", + "58734", + "58735", + "58738", + "58740", + "58752", + "58761", + "58764", + "58772", + "58776", + "58787", + "58797", + "58815", + "58821", + "58824", + "58832", + "58835", + "58839", + "58840", + "58843", + "58846", + "58854", + "58858", + "58861", + "58865", + "58871", + "58872", + "58887", + "58890", + "58891", + "58908", + "58914", + "58919", + "58924", + "58928", + "58931", + "58939", + "58942", + "58952", + "58954", + "58961", + "58963", + "58965", + "58966", + "58967", + "58974", + "58986", + "59000", + "59003", + "59006", + "59007", + "59016", + "59036", + "59039", + "59046", + "59050", + "59051", + "59054", + "59055", + "59058", + "59059", + "59067", + "59069", + "59070", + "59071", + "59072", + "59074", + "59081", + "59082", + "59085", + "59086", + "59088", + "59092", + "59093", + "59096", + "59099", + "59101", + "59105", + "59113", + "59123", + "59124", + "59130", + "59133", + "59134", + "59135", + "59137", + "59139", + "59141", + "59142", + "59144", + "59147", + "59149", + "59151", + "59153", + "59162", + "59172", + "59179", + "59182", + "59184", + "59200", + "59203", + "59206", + "59213", + "59234", + "59238", + "59239", + "59241", + "59253", + "59257", + "59261", + "59263", + "59269", + "59283", + "59289", + "59291", + "59292", + "59298", + "59299", + "59304", + "59308", + "59310", + "59311", + "59318", + "59320", + "59323", + "59326", + "59327", + "59329", + "59332", + "59334", + "59337", + "59341", + "59342", + "59348", + "59351", + "59353", + "59368", + "59371", + "59386", + "59398", + "59415", + "59417", + "59419", + "59423", + "59443", + "59445", + "59450", + "59453", + "59456", + "59461", + "59465", + "59472", + "59479", + "59480", + "59481", + "59487", + "59501", + "59502", + "59513", + "59521", + "59523", + "59525", + "59537", + "59544", + "59556", + "59561", + "59562", + "59563", + "59567", + "59570", + "59574", + "59581", + "59588", + "59597", + "59600", + "59604", + "59606", + "59608", + "59615", + "59616", + "59633", + "59639", + "59640", + "59644", + "59645", + "59650", + "59654", + "59655", + "59657", + "59664", + "59666", + "59675", + "59676", + "59693", + "59695", + "59719", + "59727", + "59736", + "59747", + "59749", + "59751", + "59754", + "59757", + "59758", + "59766", + "59782", + "59785", + "59794", + "59795", + "59813", + "59821", + "59822", + "59823", + "59825", + "59834", + "59848", + "59858", + "59862", + "59879", + "59881", + "59886", + "59889", + "59892", + "59893", + "59897", + "59900", + "59901", + "59912", + "59922", + "59927", + "59932", + "59933", + "59941", + "59962", + "59966", + "59980", + "59997", + "59999", + "60010", + "60014", + "60020", + "60023", + "60039", + "60052", + "60067", + "60069", + "60075", + "60089", + "60102", + "60105", + "60107", + "60117", + "60119", + "60124", + "60128", + "60135", + "60148", + "60149", + "60154", + "60162", + "60164", + "60171", + "60175", + "60177", + "60183", + "60189", + "60195", + "60200", + "60209", + "60215", + "60218", + "60219", + "60226", + "60233", + "60241", + "60244", + "60245", + "60250", + "60251", + "60269", + "60270", + "60277", + "60280", + "60285", + "60286", + "60288", + "60289", + "60292", + "60301", + "60307", + "60313", + "60317", + "60318", + "60319", + "60322", + "60327", + "60329", + "60334", + "60351", + "60352", + "60355", + "60360", + "60369", + "60395", + "60396", + "60403", + "60407", + "60408", + "60418", + "60419", + "60421", + "60427", + "60428", + "60434", + "60436", + "60442", + "60443", + "60447", + "60456", + "60457", + "60461", + "60462", + "60471", + "60477", + "60479", + "60487", + "60492", + "60503", + "60507", + "60520", + "60529", + "60562", + "60566", + "60573", + "60576", + "60596", + "60604", + "60612", + "60619", + "60621", + "60629", + "60638", + "60651", + "60652", + "60653", + "60655", + "60662", + "60663", + "60667", + "60674", + "60680", + "60683", + "60687", + "60693", + "60696", + "60702", + "60705", + "60708", + "60714", + "60715", + "60726", + "60734", + "60744", + "60751", + "60753", + "60754", + "60757", + "60758", + "60771", + "60784", + "60789", + "60793", + "60802", + "60803", + "60814", + "60818", + "60828", + "60833", + "60837", + "60838", + "60841", + "60852", + "60858", + "60860", + "60864", + "60893", + "60895", + "60898", + "60910", + "60915", + "60919", + "60927", + "60930", + "60938", + "60939", + "60947", + "60950", + "60956", + "60957", + "60960", + "60967", + "60970", + "60972", + "60981", + "60985", + "60996", + "61005", + "61006", + "61008", + "61009", + "76940", + "77544", + "77646", + "77687", + "77845", + "78242", + "78262", + "78420", + "78693", + "79391", + "79432", + "79806", + "79902", + "79974", + "80186", + "80269", + "80294", + "80461", + "80496", + "80865", + "80941", + "80952", + "81038", + "81057", + "81174", + "81392", + "81544", + "81748", + "81939", + "82086", + "82194", + "82215", + "82391", + "82626", + "82763", + "82851", + "82877", + "82894", + "82965", + "83159", + "84447", + "84651", + "84657", + "84769", + "84781", + "84893", + "85046", + "85099", + "85105", + "85284", + "85285", + "85318", + "85457", + "85459", + "85645", + "85730", + "86116", + "86125", + "86243", + "86667", + "86991", + "87027", + "87381", + "87410", + "87424", + "87679", + "87820", + "87844", + "87873", + "87899", + "88232", + "88255", + "88268", + "88321", + "88395", + "88481", + "88566", + "89119", + "89418", + "89545", + "89700", + "89724", + "89760", + "90098", + "90328", + "90523", + "91139", + "91232", + "91457", + "91493", + "91545", + "91676", + "91752", + "91991", + "92215", + "92364", + "92517", + "92591", + "92772", + "92866", + "93049", + "93079", + "93203", + "93680", + "94170", + "94177", + "94351", + "94416", + "94436", + "94465", + "94664", + "95069", + "95673", + "95761", + "95926", + "95988", + "96001", + "96146", + "96307", + "96754", + "96972", + "96976", + "97021", + "97429", + "98083", + "98114", + "98252", + "98294", + "98398", + "98703", + "98784", + "99358", + "99418", + "99478", + "99932", + "99943" + ], + "seed": 42, + "val_ratio": 0.2, + "fusion_type": "gated", + "loss_type": "sce", + "split": "stratified_group" +} \ No newline at end of file diff --git a/DMS/dinov2_clip_mlp/README.md b/DMS/dinov2_clip_mlp/README.md new file mode 100644 index 0000000000000000000000000000000000000000..1e7e29f1cae1b2960edc1f7760eb4f8a145fa3b4 --- /dev/null +++ b/DMS/dinov2_clip_mlp/README.md @@ -0,0 +1,52 @@ +# DINOv2-CLIP + Concat + MLP on Apple Dense Material Segmentation + +A material-classification **fusion head** from SegObjectMaterial. It classifies the +material of a masked object from two frozen embeddings: + +| | | +|---|---| +| vision | DINOv2 ViT-B/14 (CLS token, frozen) -> 768-d | +| language | CLIP ViT-L/14 text encoder over Qwen2.5-VL-7B captions (frozen) -> 768-d | +| head | Concat + MLP (`mlp`, defaults), 934,457 parameters | +| classes | 57 (Apple Dense Material Segmentation) | + +**This repo holds only the head.** Features must come from the same encoders, +captioner and prompts as training (see the SegObjectMaterial repository); the +encoders are downloaded from their own model pages under their own licenses. + +## Evaluation + +Held-out split recorded in `split.json` (source images never seen in training). +Single training run -- differences under ~0.5 mIoU points between heads are within +run-to-run noise. + +| mIoU | mAcc | eval samples | +|---|---|---| +| 0.4744 | 0.6672 | 186,231 | + +## Training + +```json +{ + "learning_rate": 5e-05, + "epochs": 50, + "batch_size": 32, + "weight_decay": 0.0001, + "lr_schedule": "constant", + "early_stopping_patience": 0, + "checkpoint": "best validation loss" +} +``` + +## Use + +```python +from utils.hub import load_head_from_hub # SegObjectMaterial repository +head, info = load_head_from_hub("s0um0r0y/SegObjectMaterial", "DMS/dinov2_clip_mlp") +logits = head(vision_features, language_features) # [B, 768], [B, 768] +``` + +## Integrity + +- `model.safetensors` sha256 `b91f86016abb3734031738c48537d2ed499d7c0bbbaf90ea8a8fc4219f649c9e` +- source config `config/config_dinov2_clip_mlp.toml`, code commit `1a8130c922267fb0786a33e3854a7e00763cc38f+dirty` diff --git a/DMS/dinov2_clip_mlp/config.toml b/DMS/dinov2_clip_mlp/config.toml new file mode 100644 index 0000000000000000000000000000000000000000..dbcd58351a0e3f308f942720c89080f7ca5f7eda --- /dev/null +++ b/DMS/dinov2_clip_mlp/config.toml @@ -0,0 +1,68 @@ +# DINOv2-CLIP + concat-MLP head: the ORIGINAL-PAPER fusion, retrained on the +# current grounded cache. The old MLP checkpoints (best_model.pth / _v2) were +# trained on a cache that no longer exists, with no held-out split recorded, so +# they cannot be evaluated fairly. Same cache as config_dinov2_clip.toml; +# own checkpoint, TensorBoard dir and W&B run, so nothing is overwritten. +# Baseline recipe (wd 1e-4, constant LR, 50 epochs) to match the other baseline rows. + +# Apple DMS -- BASE pipeline: DINOv2 ViT-B/14 (768) + Qwen2.5-VL -> CLIP text (768) +# +# Pair this with: +# src/vision_stream.py + src/language_stream.py +# run_serialization.py -> train.py (the raw/original scripts) +# +# config/config.toml is the OTHER pipeline (DINOv3 ViT-L/16 1024 + SigLIP2), +# driven by run_serialization_latest_models.py -> train_latest_models.py. +# Mixing them raises the dimension-mismatch ValueError in the fusion head. + +[data] +dataset_type = "apple_dms" +image_dir = "/images" +mask_dir = "/labels" +# Rebuilt automatically on first run; the index now stores one entry per +# CONNECTED COMPONENT, so any pre-existing labels.json must be removed first. +labels_file = "/labels_instances.json" +# Fresh directory: features are now object-grounded (bbox-cropped vision, +# bbox-prompted captions), so the old tensor_cache_dir/ contents are stale. +tensor_cache_dir = "/tensor_cache_dir_grounded" + +# Connected-component filtering (measured on 400 real DMS masks): +# keeping every component gives 7.5x more samples than the old per-(image,class) +# scheme -- 2.45M samples / 47 GB / ~7.5x the VLM captioning time -- because 69% +# of components are under 0.1% of the frame and crop to a few pixels. +# A component is kept when area >= max(min_instance_area, min_instance_frac * frame). +min_instance_area = 1000 # absolute pixel floor +min_instance_frac = 0.001 # and at least 0.1% of the frame +max_instances_per_class = 0 # 0 = keep all; set e.g. 3 to cap the long tail + + +[model] +# fusion head: read by train_latest_models.py. Without this key it defaults to +# "gated" -- which is how best_model_dinov2_clip.pth / best_model_fmd.pth were trained. +fusion = "mlp" +vision_dim = 768 # DINOv2 ViT-B/14 CLS token +language_dim = 768 # CLIP ViT-L/14 text pooler_output +num_classes = 57 + +[training] +batch_size = 32 + +# Batch size for the OFFLINE SERIALIZATION pass, which is a completely different +# memory regime from training: it pushes full-resolution images through the 7B +# VLM, whereas [training].batch_size only moves cached 768-d vectors through a +# small MLP. Measured on the 23.6 GiB 4090 -- static weights 16.2 GiB, so only +# ~7.4 GiB is left: batch 8 peaks at 17.7 GiB, 16 at 19.2 GiB, and 32 OOMs. +# 8 leaves headroom for a labmate's job to coexist; raise to 16 on a free card. +serialization_batch_size = 8 +learning_rate = 5e-5 +epochs = 50 +train_ratio = 0.8 # 80% for training +val_ratio = 0.2 # 20% for validation +tensorboard_log_dir = "/dms_dinov2_clip_mlp" + +[inference] +checkpoint_path = "/best_model_dms_dinov2_clip_mlp.pth" + +[logging] +wandb_project = "material-classification" +wandb_run_name = "dms-dinov2-clip-mlp" diff --git a/DMS/dinov2_clip_mlp/head.json b/DMS/dinov2_clip_mlp/head.json new file mode 100644 index 0000000000000000000000000000000000000000..fc92496251b68864ed6faa640c2b5583dfba3310 --- /dev/null +++ b/DMS/dinov2_clip_mlp/head.json @@ -0,0 +1,99 @@ +{ + "fusion": "mlp", + "head": "Concat + MLP", + "head_kwargs": {}, + "vision_dim": 768, + "language_dim": 768, + "num_classes": 57, + "classes": [ + "No label", + "Animal skin", + "Bone/teeth/horn", + "Brickwork", + "Cardboard", + "Carpet/rug", + "Ceiling tile", + "Ceramic", + "Chalkboard/blackboard", + "Clutter", + "Concrete", + "Cork/corkboard", + "Engineered stone", + "Fabric/cloth", + "Fiberglass wool", + "Fire", + "Foliage", + "Food", + "Fur", + "Gemstone/quartz", + "Glass", + "Hair", + "I cannot tell", + "Ice", + "Leather", + "Liquid, non-water", + "Metal", + "Mirror", + "Not on list", + "Paint/plaster/enamel", + "Paper", + "Pearl", + "Photograph/painting", + "Plastic, clear", + "Plastic, non-clear", + "Rubber/latex", + "Sand", + "Skin/lips", + "Sky", + "Snow", + "Soap", + "Soil/mud", + "Sponge", + "Stone, natural", + "Stone, polished", + "Styrofoam", + "Tile", + "Wallpaper", + "Water", + "Wax", + "Whiteboard", + "Wicker", + "Wood", + "Wood, tree", + "Bad polygon", + "Multiple materials", + "Asphalt" + ], + "dataset": "Apple Dense Material Segmentation", + "dataset_key": "DMS", + "encoders": { + "vision": "DINOv2 ViT-B/14 (CLS token, frozen)", + "language": "CLIP ViT-L/14 text encoder over Qwen2.5-VL-7B captions (frozen)", + "short": "DINOv2-CLIP", + "slug": "dinov2_clip" + }, + "parameters": 934457, + "training": { + "learning_rate": 5e-05, + "epochs": 50, + "batch_size": 32, + "weight_decay": 0.0001, + "lr_schedule": "constant", + "early_stopping_patience": 0, + "checkpoint": "best validation loss" + }, + "sha256": { + "safetensors": "b91f86016abb3734031738c48537d2ed499d7c0bbbaf90ea8a8fc4219f649c9e", + "pth": "0fe9af49a1f493b61a55aed60cef6a809458c6baeea9a5e8d2f15d3e2c4d0ad8" + }, + "source": { + "config": "config/config_dinov2_clip_mlp.toml", + "git_commit": "1a8130c922267fb0786a33e3854a7e00763cc38f+dirty", + "checkpoint_mtime": "2026-10-09T00:26:13" + }, + "metrics": { + "mIoU": 0.4743560437589232, + "mAcc": 0.6672396382567987, + "eval_samples": 186231 + } +} \ No newline at end of file diff --git a/DMS/dinov2_clip_mlp/metrics.json b/DMS/dinov2_clip_mlp/metrics.json new file mode 100644 index 0000000000000000000000000000000000000000..57914e54528189924e6f241934dbcf01813b5704 --- /dev/null +++ b/DMS/dinov2_clip_mlp/metrics.json @@ -0,0 +1,296 @@ +{ + "dataset": "DMS", + "config": "config/config_dinov2_clip_mlp.toml", + "checkpoint": "/best_model_dms_dinov2_clip_mlp.pth", + "fusion_type": "mlp", + "num_eval_samples": 186231, + "mIoU": 0.4743560437589232, + "mAcc": 0.6672396382567987, + "per_class": { + "No label": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Animal skin": { + "accuracy": 0.6228070175438597, + "iou": 0.47019867549668876, + "support": 114 + }, + "Bone/teeth/horn": { + "accuracy": 0.7954545454545454, + "iou": 0.625, + "support": 44 + }, + "Brickwork": { + "accuracy": 0.7587131367292225, + "iou": 0.5322884012539185, + "support": 1119 + }, + "Cardboard": { + "accuracy": 0.7223851417399805, + "iou": 0.4737179487179487, + "support": 1023 + }, + "Carpet/rug": { + "accuracy": 0.8028368794326242, + "iou": 0.4522314804246091, + "support": 4935 + }, + "Ceiling tile": { + "accuracy": 0.7937625754527163, + "iou": 0.499683343888537, + "support": 994 + }, + "Ceramic": { + "accuracy": 0.8217562254259502, + "iou": 0.6011505273250239, + "support": 2289 + }, + "Chalkboard/blackboard": { + "accuracy": 0.7209302325581395, + "iou": 0.49363057324840764, + "support": 215 + }, + "Clutter": { + "accuracy": 0.4528301886792453, + "iou": 0.32432432432432434, + "support": 53 + }, + "Concrete": { + "accuracy": 0.56590084643289, + "iou": 0.2826940501359106, + "support": 1654 + }, + "Cork/corkboard": { + "accuracy": 0.35294117647058826, + "iou": 0.21951219512195122, + "support": 51 + }, + "Engineered stone": { + "accuracy": 0.21348314606741572, + "iou": 0.1484375, + "support": 89 + }, + "Fabric/cloth": { + "accuracy": 0.765528498323628, + "iou": 0.700876448968052, + "support": 22668 + }, + "Fiberglass wool": { + "accuracy": 0.55, + "iou": 0.2558139534883721, + "support": 20 + }, + "Fire": { + "accuracy": 0.82, + "iou": 0.6307692307692307, + "support": 50 + }, + "Foliage": { + "accuracy": 0.9142357059509918, + "iou": 0.7736998025016458, + "support": 5142 + }, + "Food": { + "accuracy": 0.8737430167597765, + "iou": 0.6201427438540841, + "support": 895 + }, + "Fur": { + "accuracy": 0.8213457076566125, + "iou": 0.6941176470588235, + "support": 431 + }, + "Gemstone/quartz": { + "accuracy": 0.64, + "iou": 0.24806201550387597, + "support": 50 + }, + "Glass": { + "accuracy": 0.7659045504994451, + "iou": 0.667672897557955, + "support": 22525 + }, + "Hair": { + "accuracy": 0.9778592375366569, + "iou": 0.9158198297171107, + "support": 6820 + }, + "I cannot tell": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Ice": { + "accuracy": 0.6545454545454545, + "iou": 0.4931506849315068, + "support": 55 + }, + "Leather": { + "accuracy": 0.7146204311152765, + "iou": 0.43348493462194426, + "support": 2134 + }, + "Liquid, non-water": { + "accuracy": 0.5833333333333334, + "iou": 0.42, + "support": 36 + }, + "Metal": { + "accuracy": 0.8061325420375866, + "iou": 0.5545055941941337, + "support": 9099 + }, + "Mirror": { + "accuracy": 0.6750313676286073, + "iou": 0.38156028368794326, + "support": 797 + }, + "Not on list": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Paint/plaster/enamel": { + "accuracy": 0.5959586436629899, + "iou": 0.5222228341686402, + "support": 31821 + }, + "Paper": { + "accuracy": 0.8380505926056961, + "iou": 0.6929715497696189, + "support": 11306 + }, + "Pearl": { + "accuracy": 1.0, + "iou": 0.5, + "support": 1 + }, + "Photograph/painting": { + "accuracy": 0.6674655482324745, + "iou": 0.36369572314724125, + "support": 1669 + }, + "Plastic, clear": { + "accuracy": 0.6990654205607477, + "iou": 0.42275810097965333, + "support": 1605 + }, + "Plastic, non-clear": { + "accuracy": 0.6428167020523708, + "iou": 0.5052286127489154, + "support": 14130 + }, + "Rubber/latex": { + "accuracy": 0.6365330848089469, + "iou": 0.3490035769034236, + "support": 1073 + }, + "Sand": { + "accuracy": 0.4318181818181818, + "iou": 0.2733812949640288, + "support": 88 + }, + "Skin/lips": { + "accuracy": 0.9684406464167865, + "iou": 0.9211331079993562, + "support": 11819 + }, + "Sky": { + "accuracy": 0.9103992571959145, + "iou": 0.675973802137194, + "support": 2154 + }, + "Snow": { + "accuracy": 0.6055045871559633, + "iou": 0.4074074074074074, + "support": 109 + }, + "Soap": { + "accuracy": 0.2857142857142857, + "iou": 0.2857142857142857, + "support": 7 + }, + "Soil/mud": { + "accuracy": 0.6529680365296804, + "iou": 0.41690962099125367, + "support": 657 + }, + "Sponge": { + "accuracy": 0.2777777777777778, + "iou": 0.17857142857142858, + "support": 18 + }, + "Stone, natural": { + "accuracy": 0.5995085995085995, + "iou": 0.4566437928883344, + "support": 1221 + }, + "Stone, polished": { + "accuracy": 0.38794233289646135, + "iou": 0.26690712353471596, + "support": 763 + }, + "Styrofoam": { + "accuracy": 0.16129032258064516, + "iou": 0.1388888888888889, + "support": 31 + }, + "Tile": { + "accuracy": 0.6155853191859454, + "iou": 0.4333292518672707, + "support": 5749 + }, + "Wallpaper": { + "accuracy": 0.5818452380952381, + "iou": 0.3010007698229407, + "support": 672 + }, + "Water": { + "accuracy": 0.6867196367763905, + "iou": 0.4954954954954955, + "support": 881 + }, + "Wax": { + "accuracy": 0.8421052631578947, + "iou": 0.7007299270072993, + "support": 114 + }, + "Whiteboard": { + "accuracy": 0.6576576576576577, + "iou": 0.4524793388429752, + "support": 333 + }, + "Wicker": { + "accuracy": 0.7735537190082644, + "iou": 0.572827417380661, + "support": 605 + }, + "Wood": { + "accuracy": 0.7940197166546974, + "iou": 0.6218109310291937, + "support": 15317 + }, + "Wood, tree": { + "accuracy": 0.7329931972789115, + "iou": 0.5149342891278376, + "support": 588 + }, + "Bad polygon": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Multiple materials": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Asphalt": { + "accuracy": 0.46464646464646464, + "iou": 0.2839506172839506, + "support": 198 + } + } +} \ No newline at end of file diff --git a/DMS/dinov2_clip_mlp/model.pth b/DMS/dinov2_clip_mlp/model.pth new file mode 100644 index 0000000000000000000000000000000000000000..55450f67c4c1b5e2212f0264b0ae2175d1a88776 --- /dev/null +++ b/DMS/dinov2_clip_mlp/model.pth @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0fe9af49a1f493b61a55aed60cef6a809458c6baeea9a5e8d2f15d3e2c4d0ad8 +size 3750066 diff --git a/DMS/dinov2_clip_mlp/model.safetensors b/DMS/dinov2_clip_mlp/model.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..96ecd90977ece212a3ea996607da571d212e118c --- /dev/null +++ b/DMS/dinov2_clip_mlp/model.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b91f86016abb3734031738c48537d2ed499d7c0bbbaf90ea8a8fc4219f649c9e +size 3745260 diff --git a/DMS/dinov2_clip_mlp/split.json b/DMS/dinov2_clip_mlp/split.json new file mode 100644 index 0000000000000000000000000000000000000000..d576c18b525d583ad4ca9779d3d7652f29a3ff66 --- /dev/null +++ b/DMS/dinov2_clip_mlp/split.json @@ -0,0 +1,8271 @@ +{ + "val_groups": [ + "100023", + "100684", + "100767", + "100806", + "101108", + "101397", + "101542", + "101771", + "102242", + "102298", + "102300", + "102441", + "102723", + "102859", + "102949", + "103045", + "103061", + "103310", + "103351", + "103376", + "103416", + "103494", + "103686", + "103990", + "104894", + "104911", + "104917", + "105053", + "105099", + "105227", + "105355", + "105416", + "105696", + "106358", + "106446", + "106475", + "106484", + "106527", + "106788", + "106933", + "107102", + "107279", + "107305", + "107566", + "107782", + "107866", + "108158", + "108647", + "109239", + "109695", + "109726", + "109789", + "109812", + "109881", + "109999", + "110235", + "110322", + "110893", + "111049", + "111228", + "111280", + "111386", + "112424", + "112448", + "112457", + "112665", + "112857", + "113143", + "113524", + "113793", + "113890", + "114202", + "114224", + "114225", + "114241", + "114705", + "114774", + "115020", + "115498", + "115499", + "115760", + "116168", + "116191", + "116298", + "116449", + "116606", + "116733", + "117104", + "117266", + "117505", + "117707", + "118431", + "119280", + "119283", + "119321", + "119466", + "119521", + "119533", + "119783", + "119809", + "119974", + "120020", + "120125", + "120312", + "120531", + "120550", + "120678", + "120808", + "121071", + "121220", + "121316", + "121985", + "122087", + "122094", + "122153", + "122404", + "122550", + "122844", + "122964", + "123297", + "123381", + "123445", + "123516", + "123601", + "123649", + "123702", + "124102", + "124157", + "124466", + "124752", + "125018", + "125522", + "125549", + "125597", + "125898", + "125979", + "125983", + "126186", + "126431", + "126648", + "126667", + "126907", + "126987", + "127294", + "127355", + "127396", + "127586", + "127669", + "127714", + "127973", + "128106", + "128229", + "128646", + "128868", + "129361", + "129605", + "129853", + "129906", + "129979", + "130273", + "130677", + "130702", + "130741", + "130972", + "131016", + "131115", + "131213", + "131299", + "131561", + "131598", + "131633", + "131677", + "132112", + "132235", + "132287", + "132495", + "132522", + "132602", + "132652", + "132730", + "132957", + "132980", + "133073", + "133187", + "133299", + "133571", + "133998", + "134034", + "134536", + "134647", + "134744", + "134773", + "134830", + "134835", + "134865", + "135254", + "135261", + "135282", + "135490", + "135709", + "136113", + "136415", + "136496", + "136599", + "136677", + "136726", + "136786", + "136847", + "136869", + "136995", + "137430", + "137533", + "137955", + "138677", + "138726", + "139100", + "139408", + "139623", + "139650", + "139653", + "139721", + "139748", + "139977", + "140398", + "140499", + "140727", + "140777", + "141064", + "141182", + "141248", + "141855", + "142040", + "142358", + "142418", + "142569", + "142763", + "142787", + "143098", + "143149", + "143193", + "143481", + "143614", + "143630", + "143668", + "143688", + "143821", + "143884", + "144224", + "144530", + "144759", + "144762", + "144978", + "145373", + "145421", + "145538", + "147431", + "147459", + "147723", + "147858", + "147868", + "148109", + "148756", + "148810", + "148826", + "149253", + "149401", + "149468", + "150308", + "150382", + "150544", + "150565", + "150607", + "150935", + "151054", + "151243", + "151309", + "151551", + "151581", + "151726", + "151871", + "152161", + "152558", + "152760", + "152845", + "153056", + "153383", + "153617", + "153763", + "154293", + "154636", + "154681", + "154850", + "154873", + "154992", + "155063", + "155394", + "155444", + "155476", + "155920", + "156257", + "156261", + "156366", + "156674", + "157619", + "157688", + "157961", + "158086", + "158156", + "158202", + "158423", + "158990", + "159370", + "159801", + "159862", + "159919", + "159957", + "160451", + "160464", + "160982", + "161162", + "161331", + "161519", + "161576", + "161866", + "162020", + "162036", + "162092", + "162306", + "162549", + "162678", + "162798", + "163001", + "163039", + "163164", + "163254", + "163444", + "163517", + "163613", + "163825", + "163860", + "164018", + "164101", + "164713", + "164795", + "164989", + "165403", + "165521", + "165722", + "165988", + "166002", + "166374", + "166659", + "166714", + "166951", + "167223", + "167462", + "167493", + "167663", + "167917", + "168095", + "168127", + "168694", + "168971", + "169649", + "169674", + "169728", + "169817", + "169838", + "170025", + "170807", + "170875", + "170998", + "171186", + "171219", + "171460", + "171626", + "171726", + "172073", + "172138", + "172222", + "172488", + "172575", + "172763", + "172830", + "172960", + "173232", + "173248", + "173732", + "174439", + "174449", + "174521", + "174666", + "175176", + "175266", + "175356", + "175504", + "175844", + "175887", + "176175", + "176211", + "176255", + "176296", + "176375", + "176444", + "176998", + "177058", + "177108", + "177336", + "177473", + "177536", + "177680", + "177701", + "178063", + "178199", + "178270", + "178278", + "178421", + "178454", + "178973", + "179168", + "179264", + "179369", + "179600", + "179943", + "180839", + "181026", + "181157", + "181763", + "181990", + "182089", + "182267", + "182568", + "182583", + "182605", + "182793", + "182840", + "183009", + "183268", + "183662", + "183829", + "183932", + "184491", + "184676", + "184770", + "184802", + "184841", + "184892", + "185054", + "185101", + "185117", + "185165", + "185298", + "185316", + "185777", + "186172", + "186197", + "186424", + "186481", + "186585", + "186719", + "186902", + "187744", + "187814", + "187894", + "188066", + "188085", + "188778", + "189232", + "189269", + "189397", + "189485", + "189490", + "189519", + "189574", + "189751", + "190146", + "190176", + "190206", + "190249", + "190250", + "190332", + "190448", + "190477", + "190569", + "191141", + "191237", + "191400", + "191635", + "192431", + "192460", + "192557", + "192778", + "192831", + "192947", + "193267", + "193325", + "193358", + "193365", + "193374", + "193387", + "193490", + "193566", + "193574", + "193637", + "193681", + "193728", + "193737", + "193811", + "193844", + "193941", + "194054", + "194063", + "194154", + "194170", + "194195", + "194240", + "194254", + "194268", + "194280", + "194303", + "194351", + "194418", + "194489", + "194561", + "194594", + "194597", + "194642", + "194676", + "194688", + "194711", + "194735", + "194800", + "194803", + "194811", + "194814", + "194828", + "194992", + "195013", + "195016", + "195035", + "195196", + "195230", + "195238", + "195296", + "195299", + "195348", + "195405", + "195408", + "195421", + "195475", + "195509", + "195526", + "195535", + "195569", + "195618", + "195638", + "195663", + "195705", + "195709", + "195714", + "195736", + "195789", + "195791", + "195803", + "195804", + "195807", + "195829", + "195831", + "195900", + "195926", + "195938", + "195943", + "195951", + "196009", + "196030", + "196046", + "196126", + "196127", + "196165", + "196221", + "196266", + "196286", + "196293", + "196342", + "196348", + "196369", + "196391", + "196448", + "196476", + "196503", + "196528", + "196529", + "196580", + "196584", + "196604", + "196613", + "196640", + "196641", + "196692", + "196705", + "196730", + "196805", + "196815", + "196850", + "196861", + "196872", + "196888", + "196925", + "196927", + "196981", + "196988", + "196990", + "197034", + "197065", + "197078", + "197087", + "197108", + "197149", + "197206", + "197251", + "197258", + "197263", + "197269", + "197282", + "197290", + "197308", + "197323", + "197348", + "197351", + "197380", + "197432", + "197467", + "197468", + "197516", + "197616", + "197632", + "197687", + "197717", + "197730", + "197781", + "197788", + "197835", + "197884", + "197910", + "197982", + "198031", + "198034", + "198126", + "198132", + "198202", + "198298", + "198314", + "198324", + "198328", + "198348", + "198442", + "198491", + "198550", + "198552", + "198577", + "198585", + "198625", + "198681", + "198690", + "198695", + "198697", + "198706", + "198712", + "198721", + "198724", + "198730", + "198732", + "198767", + "198815", + "198825", + "198907", + "198950", + "198969", + "199023", + "199034", + "199207", + "199245", + "199256", + "199271", + "199309", + "199370", + "199386", + "199396", + "199410", + "199461", + "199477", + "199486", + "199693", + "199733", + "199768", + "199796", + "199832", + "199855", + "199896", + "199910", + "199923", + "199933", + "199947", + "200017", + "200043", + "200108", + "200127", + "200152", + "200170", + "200238", + "200272", + "200309", + "200315", + "200342", + "200413", + "200443", + "200461", + "200551", + "200611", + "200639", + "200647", + "200663", + "200669", + "200692", + "200720", + "200757", + "200765", + "200768", + "200775", + "200803", + "200808", + "200889", + "200896", + "200897", + "200922", + "200983", + "200986", + "201005", + "201020", + "201045", + "201048", + "201113", + "201154", + "201187", + "201234", + "201243", + "201249", + "201284", + "201292", + "201347", + "201388", + "201410", + "201454", + "201497", + "201554", + "201559", + "201591", + "201614", + "201691", + "201754", + "201771", + "201808", + "201852", + "201856", + "201909", + "201913", + "201920", + "201941", + "201977", + "202005", + "202034", + "202120", + "202201", + "202218", + "202236", + "202253", + "202276", + "202307", + "202321", + "202324", + "202377", + "202382", + "202454", + "202490", + "202499", + "202531", + "202546", + "202567", + "202582", + "202630", + "202645", + "202702", + "202771", + "202777", + "202814", + "202873", + "202876", + "202898", + "202942", + "203001", + "203025", + "203044", + "203076", + "203174", + "203226", + "203232", + "203237", + "203240", + "203339", + "203343", + "203372", + "203392", + "203401", + "203416", + "203463", + "203486", + "203515", + "203775", + "203842", + "203844", + "203996", + "204003", + "204018", + "204032", + "204040", + "204104", + "204108", + "204179", + "204182", + "204197", + "204211", + "204212", + "204223", + "204250", + "204271", + "204398", + "204441", + "204448", + "204488", + "204489", + "204497", + "204499", + "204590", + "204628", + "204667", + "204710", + "204790", + "204797", + "204847", + "204850", + "204895", + "204999", + "205044", + "205054", + "205061", + "205093", + "205162", + "205171", + "205189", + "205193", + "205224", + "205245", + "205256", + "205317", + "205353", + "205483", + "205626", + "205646", + "205656", + "205701", + "205732", + "205754", + "205800", + "205846", + "205858", + "205859", + "205901", + "205942", + "205954", + "206023", + "206042", + "206076", + "206132", + "206233", + "206237", + "206249", + "206259", + "206272", + "206331", + "206376", + "206506", + "206545", + "206566", + "206568", + "206577", + "206592", + "206625", + "206773", + "206848", + "206919", + "206930", + "206938", + "206960", + "206963", + "206966", + "207000", + "207006", + "207014", + "207058", + "207081", + "207082", + "207129", + "207140", + "207167", + "207266", + "207283", + "207329", + "207347", + "207351", + "207481", + "207504", + "207554", + "207575", + "207701", + "207735", + "207754", + "207756", + "207757", + "207765", + "207768", + "207789", + "207814", + "207885", + "207888", + "207923", + "207933", + "207938", + "207955", + "207971", + "208023", + "208152", + "208159", + "208160", + "208171", + "208187", + "208201", + "208429", + "208441", + "208468", + "208497", + "208513", + "208532", + "208534", + "208555", + "208578", + "208592", + "208610", + "208625", + "208663", + "208680", + "208690", + "208694", + "208702", + "208723", + "208848", + "208856", + "208864", + "208885", + "208900", + "208924", + "208967", + "208968", + "209081", + "209085", + "209114", + "209174", + "209214", + "209221", + "209313", + "209367", + "209388", + "209396", + "209406", + "209415", + "209430", + "209438", + "209615", + "209653", + "209701", + "209709", + "209726", + "209737", + "209746", + "209753", + "209760", + "209765", + "209792", + "209796", + "209812", + "209823", + "209860", + "209861", + "209895", + "209901", + "209905", + "209932", + "209996", + "210064", + "210160", + "210197", + "210227", + "210229", + "210235", + "210318", + "210331", + "210341", + "210344", + "210353", + "210398", + "210399", + "210465", + "210466", + "210469", + "210473", + "210525", + "210540", + "210567", + "210581", + "210601", + "210668", + "210687", + "210762", + "210796", + "210818", + "210904", + "210930", + "210933", + "210967", + "210996", + "211023", + "211044", + "211069", + "211096", + "211101", + "211108", + "211155", + "211212", + "211268", + "211329", + "211356", + "211531", + "211537", + "211550", + "211595", + "211596", + "211629", + "211664", + "211684", + "211715", + "211752", + "211785", + "211854", + "211859", + "211880", + "211929", + "211937", + "211973", + "211974", + "212055", + "212093", + "212149", + "212153", + "212251", + "212302", + "212366", + "212523", + "212528", + "212559", + "212580", + "212628", + "212696", + "212740", + "212915", + "212956", + "212969", + "212975", + "213064", + "213065", + "213109", + "213113", + "213213", + "213254", + "213365", + "213375", + "213380", + "213385", + "213394", + "213400", + "213503", + "213514", + "213524", + "213534", + "213551", + "213601", + "213636", + "213651", + "213664", + "213737", + "213778", + "213792", + "213816", + "213854", + "213855", + "213871", + "213880", + "213884", + "213996", + "214128", + "214181", + "214188", + "214193", + "214212", + "214272", + "214310", + "214329", + "214331", + "214347", + "214420", + "214434", + "214443", + "214469", + "214481", + "214515", + "214562", + "214633", + "214669", + "214696", + "214701", + "214717", + "214745", + "214779", + "214807", + "214830", + "214921", + "214927", + "214931", + "214990", + "215005", + "215024", + "215076", + "215099", + "215116", + "215172", + "215175", + "215181", + "215196", + "215215", + "215253", + "215308", + "215323", + "215330", + "215373", + "215435", + "215440", + "215479", + "215491", + "215533", + "215583", + "215584", + "215687", + "215693", + "215706", + "215718", + "215778", + "215807", + "215838", + "215859", + "215877", + "215924", + "215935", + "215945", + "215951", + "216020", + "216026", + "216033", + "216040", + "216069", + "216081", + "216174", + "216193", + "216196", + "216207", + "216328", + "216343", + "216430", + "216444", + "216445", + "216497", + "216500", + "216511", + "216513", + "216535", + "216765", + "216967", + "217059", + "217065", + "217076", + "217147", + "217151", + "217155", + "217181", + "217326", + "217363", + "217381", + "217412", + "217475", + "217476", + "217534", + "217565", + "217568", + "217645", + "217660", + "217675", + "217740", + "217779", + "217808", + "217830", + "217858", + "217878", + "217884", + "217908", + "217914", + "217956", + "218062", + "218063", + "218134", + "218137", + "218142", + "218173", + "218178", + "218198", + "218240", + "218281", + "218294", + "218350", + "218373", + "218385", + "218400", + "218425", + "218435", + "218475", + "218502", + "218582", + "218675", + "218687", + "218717", + "218722", + "218781", + "218833", + "218841", + "218944", + "218981", + "218985", + "219032", + "219037", + "219062", + "219065", + "219085", + "219150", + "219165", + "219246", + "219263", + "219295", + "219324", + "219332", + "219381", + "219390", + "219425", + "219454", + "219458", + "219459", + "219475", + "219485", + "219561", + "219619", + "219626", + "219641", + "219665", + "219693", + "219696", + "219740", + "219754", + "219763", + "219799", + "219807", + "219880", + "219958", + "220010", + "220046", + "220081", + "220118", + "220130", + "220140", + "220198", + "220227", + "220318", + "220326", + "220349", + "220391", + "220407", + "220408", + "220419", + "220453", + "220458", + "220471", + "220473", + "220474", + "220477", + "220485", + "220518", + "220539", + "220551", + "220553", + "220572", + "220647", + "220649", + "220653", + "220669", + "220781", + "220787", + "220809", + "220880", + "220898", + "220946", + "220968", + "220984", + "220992", + "221029", + "221030", + "221074", + "221112", + "221125", + "221176", + "221184", + "221221", + "221248", + "221277", + "221305", + "221314", + "221382", + "221400", + "221412", + "221448", + "221454", + "221470", + "221485", + "221489", + "221495", + "221505", + "221562", + "221583", + "221605", + "221606", + "221721", + "221733", + "221763", + "221773", + "221792", + "221799", + "221923", + "222027", + "222127", + "222131", + "222143", + "222191", + "222222", + "222268", + "222269", + "222332", + "222447", + "222449", + "222475", + "222498", + "222520", + "222532", + "222535", + "222560", + "222681", + "222719", + "222759", + "222817", + "222819", + "222828", + "222855", + "222966", + "222979", + "223064", + "223077", + "223106", + "223163", + "223178", + "223189", + "223194", + "223218", + "223289", + "223294", + "223311", + "223318", + "223321", + "223397", + "223401", + "223416", + "223418", + "223462", + "223476", + "223510", + "223543", + "223552", + "223662", + "223673", + "223691", + "223723", + "223838", + "223885", + "223895", + "223918", + "223928", + "223930", + "223933", + "223966", + "224017", + "224022", + "224116", + "224119", + "224172", + "224259", + "224302", + "224328", + "224379", + "224390", + "224409", + "224440", + "224443", + "224457", + "224483", + "224485", + "224496", + "224499", + "224525", + "224537", + "224538", + "224543", + "224549", + "224566", + "224596", + "224614", + "224701", + "224714", + "224754", + "224776", + "224781", + "224830", + "224891", + "22501", + "225044", + "22506", + "225063", + "22507", + "225082", + "225138", + "225162", + "225192", + "225232", + "22524", + "225253", + "225266", + "22527", + "225274", + "22530", + "225303", + "225311", + "225319", + "225327", + "225346", + "22535", + "22537", + "22541", + "225413", + "225428", + "22543", + "225442", + "225473", + "225497", + "225550", + "22556", + "225576", + "22558", + "225618", + "22564", + "22565", + "225688", + "225706", + "22572", + "22574", + "22575", + "225762", + "225766", + "22578", + "22580", + "225846", + "22585", + "225871", + "225907", + "22594", + "225968", + "225989", + "225990", + "22600", + "226008", + "22601", + "22603", + "226059", + "22606", + "226096", + "22611", + "226117", + "226202", + "226230", + "226302", + "22633", + "226336", + "22634", + "226398", + "22641", + "22642", + "226429", + "226448", + "226481", + "226488", + "226491", + "226511", + "226533", + "226566", + "22658", + "226583", + "226586", + "226598", + "226613", + "226648", + "22665", + "226668", + "226702", + "226704", + "226709", + "226767", + "226778", + "226785", + "226849", + "22685", + "22686", + "226883", + "226884", + "226892", + "226915", + "226931", + "226940", + "226958", + "22698", + "226984", + "226993", + "227008", + "22704", + "227086", + "227160", + "227162", + "227163", + "227169", + "227173", + "227182", + "227193", + "22720", + "22721", + "227211", + "227223", + "22723", + "227231", + "227245", + "227275", + "227292", + "227297", + "227314", + "227344", + "227347", + "22740", + "227410", + "227472", + "22748", + "227481", + "22750", + "22753", + "227544", + "227549", + "22756", + "22758", + "227599", + "227616", + "22762", + "227621", + "227627", + "227667", + "227670", + "227681", + "22769", + "227691", + "227697", + "22771", + "227726", + "227753", + "227779", + "22779", + "227799", + "227837", + "227848", + "227914", + "227927", + "22795", + "227967", + "227969", + "227980", + "227986", + "227991", + "228011", + "228025", + "22803", + "228035", + "228043", + "22809", + "22810", + "22814", + "22815", + "228158", + "22816", + "228166", + "228169", + "228181", + "22819", + "22821", + "228212", + "22823", + "228238", + "228253", + "22827", + "228280", + "228285", + "228305", + "228351", + "22836", + "228378", + "228392", + "22842", + "228458", + "228482", + "228496", + "22854", + "228592", + "228614", + "228616", + "22868", + "228691", + "22871", + "22873", + "228771", + "228800", + "22884", + "22885", + "22891", + "228938", + "228939", + "22895", + "22896", + "228961", + "228988", + "228999", + "229024", + "229032", + "22908", + "229083", + "22918", + "229189", + "22919", + "229197", + "22920", + "229209", + "22923", + "229232", + "229235", + "229321", + "229328", + "229364", + "229378", + "229398", + "22940", + "22944", + "229440", + "229456", + "22947", + "229524", + "22953", + "22954", + "22955", + "22956", + "22957", + "22958", + "229603", + "22961", + "229613", + "229656", + "22967", + "229705", + "22971", + "229809", + "229814", + "229859", + "22986", + "229902", + "22991", + "229918", + "22993", + "229943", + "22998", + "229984", + "229994", + "23000", + "230003", + "230009", + "23001", + "230024", + "230034", + "23009", + "23010", + "230109", + "230114", + "230115", + "230118", + "23014", + "230145", + "230147", + "23016", + "230243", + "230257", + "230258", + "230276", + "230281", + "23029", + "23030", + "230305", + "230360", + "23039", + "230394", + "230403", + "230406", + "230486", + "23049", + "23051", + "230519", + "23054", + "230569", + "23058", + "23059", + "230604", + "230620", + "230644", + "23066", + "23071", + "230711", + "230729", + "230754", + "230765", + "230776", + "23080", + "230803", + "23082", + "230822", + "230825", + "23086", + "230913", + "230915", + "230917", + "23092", + "230927", + "230965", + "23098", + "23100", + "231015", + "231038", + "231065", + "23107", + "23108", + "231098", + "231100", + "231171", + "23120", + "231224", + "231236", + "23126", + "231277", + "23130", + "231312", + "231340", + "231382", + "231389", + "23145", + "23153", + "231589", + "23162", + "231633", + "23166", + "23167", + "231710", + "231722", + "23173", + "231732", + "23175", + "23179", + "231838", + "231857", + "231883", + "231902", + "231904", + "23192", + "231935", + "23200", + "23202", + "23204", + "232073", + "232080", + "232095", + "23215", + "232181", + "232190", + "23221", + "232213", + "232235", + "232263", + "232338", + "23234", + "23239", + "232407", + "232434", + "232445", + "23246", + "232480", + "232488", + "232523", + "23256", + "23259", + "232594", + "23260", + "23263", + "232630", + "23264", + "23266", + "232693", + "232698", + "232700", + "232702", + "23272", + "232738", + "232764", + "23278", + "232787", + "23281", + "23284", + "23285", + "23287", + "232875", + "232878", + "23288", + "232885", + "23294", + "232948", + "232970", + "232972", + "232976", + "232998", + "233008", + "233009", + "233015", + "233034", + "233037", + "23308", + "23309", + "23310", + "233119", + "23312", + "233141", + "233208", + "23321", + "23322", + "23324", + "233246", + "233267", + "233282", + "233299", + "23332", + "233326", + "233330", + "23340", + "23353", + "23357", + "23359", + "23372", + "23374", + "23375", + "23383", + "23388", + "23395", + "23402", + "23404", + "23406", + "23409", + "23413", + "23420", + "23434", + "23441", + "23443", + "23453", + "23454", + "23462", + "23463", + "23464", + "23467", + "23475", + "23480", + "23485", + "23489", + "23490", + "23502", + "23504", + "23509", + "23510", + "23514", + "23516", + "23541", + "23542", + "23548", + "23549", + "23551", + "23555", + "23559", + "23578", + "23579", + "23583", + "23585", + "23589", + "23591", + "23612", + "23616", + "23621", + "23627", + "23637", + "23652", + "23654", + "23656", + "23657", + "23668", + "23681", + "23686", + "23692", + "23696", + "23697", + "23701", + "23702", + "23709", + "23739", + "23744", + "23753", + "23756", + "23764", + "23766", + "23774", + "23776", + "23784", + "23785", + "23794", + "23796", + "23799", + "23803", + "23823", + "23824", + "23825", + "23827", + "23835", + "23846", + "23855", + "23859", + "23868", + "23871", + "23876", + "23890", + "23891", + "23893", + "23895", + "23896", + "23897", + "23901", + "23906", + "23921", + "23928", + "23933", + "23945", + "23950", + "23953", + "23955", + "23960", + "23967", + "23973", + "23980", + "23981", + "23984", + "23988", + "23993", + "23995", + "23999", + "24005", + "24019", + "24022", + "24024", + "24029", + "24032", + "24033", + "24036", + "24037", + "24039", + "24043", + "24047", + "24056", + "24059", + "24060", + "24061", + "24072", + "24079", + "24085", + "24090", + "24101", + "24106", + "24112", + "24113", + "24118", + "24119", + "24123", + "24130", + "24131", + "24134", + "24136", + "24138", + "24142", + "24164", + "24168", + "24171", + "24176", + "24181", + "24184", + "24192", + "24197", + "24198", + "24200", + "24219", + "24223", + "24227", + "24230", + "24241", + "24246", + "24250", + "24251", + "24255", + "24263", + "24264", + "24269", + "24273", + "24275", + "24278", + "24284", + "24297", + "24303", + "24305", + "24309", + "24315", + "24323", + "24326", + "24333", + "24337", + "24338", + "24339", + "24341", + "24344", + "24353", + "24361", + "24373", + "24383", + "24390", + "24393", + "24396", + "24400", + "24404", + "24405", + "24410", + "24412", + "24433", + "24436", + "24438", + "24441", + "24446", + "24452", + "24453", + "24464", + "24466", + "24469", + "24487", + "24493", + "24500", + "24508", + "24513", + "24516", + "24517", + "24524", + "24527", + "24531", + "24541", + "24549", + "24557", + "24567", + "24578", + "24579", + "24580", + "24585", + "24588", + "24590", + "24599", + "24600", + "24616", + "24627", + "24630", + "24632", + "24633", + "24637", + "24639", + "24645", + "24649", + "24651", + "24655", + "24657", + "24668", + "24670", + "24676", + "24684", + "24688", + "24689", + "24692", + "24702", + "24704", + "24711", + "24716", + "24717", + "24733", + "24736", + "24739", + "24743", + "24769", + "24774", + "24777", + "24779", + "24782", + "24789", + "24798", + "24799", + "24801", + "24808", + "24822", + "24824", + "24832", + "24836", + "24849", + "24855", + "24863", + "24872", + "24879", + "24881", + "24884", + "24885", + "24886", + "24887", + "24888", + "24894", + "24895", + "24898", + "24902", + "24908", + "24917", + "24925", + "24928", + "24932", + "24940", + "24945", + "24956", + "24959", + "24962", + "24963", + "24968", + "24969", + "24983", + "24985", + "24986", + "24991", + "24995", + "24999", + "25001", + "25007", + "25009", + "25011", + "25012", + "25015", + "25018", + "25020", + "25021", + "25025", + "25031", + "25045", + "25049", + "25054", + "25058", + "25071", + "25081", + "25082", + "25087", + "25091", + "25105", + "25108", + "25112", + "25113", + "25117", + "25119", + "25124", + "25125", + "25129", + "25143", + "25145", + "25160", + "25168", + "25176", + "25186", + "25187", + "25193", + "25194", + "25196", + "25199", + "25207", + "25211", + "25215", + "25217", + "25218", + "25227", + "25245", + "25254", + "25270", + "25284", + "25288", + "25296", + "25299", + "25305", + "25333", + "25337", + "25338", + "25347", + "25349", + "25350", + "25353", + "25355", + "25358", + "25370", + "25393", + "25403", + "25412", + "25413", + "25414", + "25417", + "25422", + "25423", + "25425", + "25428", + "25434", + "25437", + "25449", + "25450", + "25451", + "25452", + "25471", + "25473", + "25474", + "25480", + "25485", + "25486", + "25495", + "25508", + "25509", + "25512", + "25514", + "25518", + "25520", + "25523", + "25524", + "25527", + "25530", + "25531", + "25539", + "25542", + "25544", + "25545", + "25554", + "25561", + "25565", + "25566", + "25577", + "25579", + "25582", + "25587", + "25597", + "25598", + "25601", + "25611", + "25619", + "25622", + "25632", + "25635", + "25637", + "25639", + "25643", + "25647", + "25654", + "25661", + "25665", + "25672", + "25674", + "25677", + "25679", + "25682", + "25686", + "25688", + "25693", + "25696", + "25699", + "25700", + "25704", + "25706", + "25711", + "25712", + "25718", + "25722", + "25726", + "25728", + "25734", + "25740", + "25743", + "25745", + "25747", + "25750", + "25780", + "25785", + "25787", + "25798", + "25799", + "25816", + "25819", + "25823", + "25825", + "25830", + "25834", + "25841", + "25848", + "25853", + "25854", + "25861", + "25863", + "25866", + "25868", + "25869", + "25874", + "25879", + "25899", + "25904", + "25905", + "25913", + "25941", + "25944", + "25945", + "25948", + "25950", + "25953", + "25959", + "25971", + "25973", + "25974", + "25980", + "25983", + "25990", + "25992", + "25994", + "25998", + "25999", + "26004", + "26015", + "26016", + "26017", + "26020", + "26021", + "26024", + "26032", + "26033", + "26039", + "26043", + "26047", + "26053", + "26062", + "26070", + "26074", + "26084", + "26089", + "26093", + "26094", + "26107", + "26108", + "26120", + "26136", + "26144", + "26155", + "26157", + "26159", + "26162", + "26168", + "26170", + "26173", + "26180", + "26184", + "26190", + "26191", + "26197", + "26203", + "26216", + "26220", + "26233", + "26235", + "26243", + "26244", + "26245", + "26253", + "26256", + "26277", + "26281", + "26284", + "26286", + "26289", + "26291", + "26299", + "26316", + "26325", + "26327", + "26347", + "26348", + "26351", + "26352", + "26354", + "26358", + "26359", + "26360", + "26365", + "26371", + "26375", + "26388", + "26399", + "26410", + "26412", + "26414", + "26426", + "26437", + "26438", + "26439", + "26452", + "26477", + "26481", + "26485", + "26486", + "26489", + "26517", + "26526", + "26530", + "26539", + "26541", + "26546", + "26558", + "26560", + "26571", + "26576", + "26577", + "26578", + "26579", + "26581", + "26603", + "26615", + "26620", + "26625", + "26631", + "26643", + "26644", + "26645", + "26658", + "26661", + "26666", + "26670", + "26671", + "26683", + "26685", + "26686", + "26692", + "26696", + "26699", + "26700", + "26707", + "26711", + "26718", + "26735", + "26736", + "26745", + "26748", + "26753", + "26760", + "26762", + "26764", + "26766", + "26768", + "26773", + "26780", + "26785", + "26790", + "26800", + "26808", + "26811", + "26817", + "26818", + "26819", + "26821", + "26833", + "26858", + "26861", + "26872", + "26874", + "26875", + "26878", + "26884", + "26892", + "26895", + "26897", + "26912", + "26918", + "26926", + "26929", + "26937", + "26944", + "26954", + "26958", + "26964", + "26966", + "26968", + "26969", + "26976", + "26980", + "26981", + "26991", + "26992", + "27024", + "27027", + "27028", + "27031", + "27033", + "27042", + "27043", + "27046", + "27050", + "27065", + "27067", + "27078", + "27084", + "27093", + "27121", + "27130", + "27138", + "27144", + "27145", + "27163", + "27172", + "27176", + "27192", + "27193", + "27197", + "27198", + "27200", + "27204", + "27206", + "27223", + "27224", + "27234", + "27236", + "27239", + "27247", + "27249", + "27254", + "27261", + "27268", + "27270", + "27276", + "27277", + "27282", + "27283", + "27284", + "27295", + "27296", + "27301", + "27305", + "27307", + "27313", + "27316", + "27321", + "27323", + "27326", + "27332", + "27346", + "27355", + "27358", + "27361", + "27365", + "27368", + "27369", + "27370", + "27374", + "27382", + "27387", + "27391", + "27395", + "27407", + "27409", + "27421", + "27430", + "27432", + "27436", + "27437", + "27443", + "27444", + "27450", + "27452", + "27458", + "27467", + "27468", + "27473", + "27474", + "27485", + "27487", + "27492", + "27496", + "27497", + "27499", + "27502", + "27508", + "27509", + "27512", + "27519", + "27525", + "27527", + "27529", + "27543", + "27549", + "27553", + "27559", + "27560", + "27570", + "27576", + "27577", + "27579", + "27581", + "27584", + "27592", + "27594", + "27601", + "27604", + "27607", + "27608", + "27611", + "27612", + "27619", + "27624", + "27626", + "27642", + "27648", + "27658", + "27660", + "27671", + "27682", + "27687", + "27688", + "27703", + "27705", + "27714", + "27716", + "27721", + "27722", + "27732", + "27734", + "27740", + "27743", + "27747", + "27749", + "27750", + "27757", + "27760", + "27766", + "27773", + "27780", + "27783", + "27789", + "27798", + "27800", + "27815", + "27817", + "27832", + "27833", + "27836", + "27850", + "27852", + "27858", + "27869", + "27876", + "27877", + "27879", + "27880", + "27881", + "27883", + "27888", + "27893", + "27920", + "27931", + "27935", + "27936", + "27938", + "27940", + "27941", + "27943", + "27947", + "27949", + "27956", + "27962", + "27970", + "27986", + "28006", + "28007", + "28008", + "28013", + "28026", + "28027", + "28028", + "28031", + "28038", + "28039", + "28045", + "28047", + "28050", + "28052", + "28061", + "28069", + "28070", + "28072", + "28073", + "28081", + "28082", + "28090", + "28100", + "28106", + "28109", + "28110", + "28112", + "28116", + "28119", + "28121", + "28122", + "28134", + "28141", + "28150", + "28153", + "28155", + "28158", + "28159", + "28160", + "28162", + "28163", + "28169", + "28177", + "28181", + "28182", + "28183", + "28190", + "28191", + "28197", + "28205", + "28207", + "28208", + "28209", + "28212", + "28218", + "28223", + "28226", + "28228", + "28229", + "28232", + "28241", + "28242", + "28244", + "28249", + "28252", + "28261", + "28262", + "28263", + "28272", + "28273", + "28278", + "28285", + "28294", + "28296", + "28299", + "28311", + "28319", + "28320", + "28323", + "28332", + "28338", + "28346", + "28350", + "28360", + "28372", + "28376", + "28378", + "28382", + "28383", + "28390", + "28392", + "28395", + "28396", + "28411", + "28416", + "28423", + "28441", + "28452", + "28453", + "28463", + "28467", + "28471", + "28473", + "28476", + "28479", + "28483", + "28489", + "28498", + "28499", + "28501", + "28503", + "28504", + "28512", + "28515", + "28517", + "28519", + "28526", + "28538", + "28540", + "28541", + "28542", + "28546", + "28548", + "28553", + "28557", + "28558", + "28560", + "28583", + "28584", + "28591", + "28595", + "28598", + "28600", + "28601", + "28607", + "28609", + "28611", + "28612", + "28616", + "28621", + "28622", + "28631", + "28645", + "28647", + "28660", + "28661", + "28662", + "28665", + "28675", + "28682", + "28685", + "28691", + "28697", + "28699", + "28700", + "28708", + "28719", + "28724", + "28725", + "28727", + "28728", + "28740", + "28741", + "28744", + "28747", + "28749", + "28760", + "28763", + "28764", + "28777", + "28778", + "28782", + "28788", + "28793", + "28794", + "28797", + "28798", + "28803", + "28827", + "28831", + "28833", + "28842", + "28844", + "28846", + "28847", + "28863", + "28867", + "28885", + "28888", + "28895", + "28898", + "28902", + "28912", + "28914", + "28919", + "28923", + "28925", + "28927", + "28939", + "28940", + "28945", + "28949", + "28951", + "28954", + "28956", + "28958", + "28960", + "28972", + "28973", + "28981", + "28982", + "28992", + "29010", + "29022", + "29034", + "29036", + "29040", + "29059", + "29060", + "29072", + "29074", + "29075", + "29077", + "29086", + "29094", + "29095", + "29104", + "29106", + "29107", + "29111", + "29121", + "29124", + "29130", + "29132", + "29147", + "29184", + "29190", + "29215", + "29222", + "29223", + "29242", + "29249", + "29258", + "29260", + "29263", + "29266", + "29281", + "29285", + "29291", + "29304", + "29309", + "29310", + "29315", + "29318", + "29321", + "29326", + "29340", + "29345", + "29347", + "29360", + "29361", + "29366", + "29371", + "29377", + "29394", + "29399", + "29404", + "29406", + "29411", + "29443", + "29447", + "29453", + "29462", + "29468", + "29479", + "29495", + "29499", + "29505", + "29507", + "29509", + "29515", + "29519", + "29524", + "29530", + "29544", + "29546", + "29547", + "29555", + "29563", + "29566", + "29573", + "29575", + "29576", + "29578", + "29590", + "29591", + "29607", + "29634", + "29635", + "29644", + "29645", + "29650", + "29652", + "29658", + "29662", + "29663", + "29676", + "29679", + "29680", + "29684", + "29692", + "29696", + "29699", + "29704", + "29705", + "29707", + "29719", + "29723", + "29725", + "29726", + "29729", + "29735", + "29742", + "29750", + "29762", + "29769", + "29772", + "29774", + "29780", + "29781", + "29792", + "29801", + "29806", + "29811", + "29816", + "29817", + "29821", + "29832", + "29834", + "29836", + "29838", + "29841", + "29843", + "29846", + "29847", + "29853", + "29858", + "29861", + "29868", + "29870", + "29871", + "29883", + "29894", + "29896", + "29898", + "29905", + "29908", + "29911", + "29914", + "29918", + "29927", + "29931", + "29933", + "29941", + "29949", + "29955", + "29961", + "29964", + "29966", + "29967", + "29976", + "29980", + "29983", + "29984", + "29994", + "29997", + "30002", + "30010", + "30021", + "30027", + "30028", + "30029", + "30034", + "30038", + "30047", + "30048", + "30049", + "30050", + "30051", + "30061", + "30064", + "30071", + "30074", + "30075", + "30077", + "30082", + "30087", + "30093", + "30100", + "30101", + "30102", + "30109", + "30117", + "30124", + "30131", + "30134", + "30143", + "30145", + "30154", + "30155", + "30173", + "30177", + "30197", + "30201", + "30203", + "30210", + "30214", + "30216", + "30221", + "30223", + "30231", + "30239", + "30240", + "30242", + "30245", + "30247", + "30254", + "30260", + "30271", + "30272", + "30284", + "30289", + "30296", + "30307", + "30310", + "30312", + "30313", + "30319", + "30328", + "30331", + "30340", + "30345", + "30346", + "30348", + "30356", + "30360", + "30365", + "30375", + "30382", + "30402", + "30403", + "30405", + "30410", + "30414", + "30436", + "30440", + "30441", + "30444", + "30454", + "30457", + "30473", + "30474", + "30476", + "30485", + "30496", + "30501", + "30506", + "30507", + "30513", + "30521", + "30522", + "30524", + "30529", + "30531", + "30534", + "30541", + "30548", + "30551", + "30555", + "30556", + "30560", + "30563", + "30565", + "30567", + "30586", + "30588", + "30590", + "30599", + "30604", + "30614", + "30650", + "30653", + "30656", + "30663", + "30666", + "30667", + "30669", + "30678", + "30689", + "30700", + "30704", + "30711", + "30727", + "30728", + "30729", + "30731", + "30745", + "30746", + "30748", + "30750", + "30759", + "30760", + "30766", + "30771", + "30781", + "30782", + "30794", + "30797", + "30805", + "30813", + "30818", + "30821", + "30848", + "30849", + "30854", + "30868", + "30869", + "30873", + "30874", + "30879", + "30893", + "30896", + "30902", + "30908", + "30911", + "30913", + "30917", + "30918", + "30931", + "30943", + "30949", + "30954", + "30959", + "30964", + "30974", + "30977", + "30981", + "30985", + "30996", + "30997", + "31003", + "31020", + "31025", + "31032", + "31061", + "31064", + "31065", + "31076", + "31082", + "31091", + "31104", + "31105", + "31115", + "31121", + "31123", + "31132", + "31134", + "31138", + "31145", + "31149", + "31154", + "31156", + "31166", + "31167", + "31168", + "31169", + "31170", + "31177", + "31182", + "31183", + "31188", + "31196", + "31198", + "31199", + "31210", + "31227", + "31230", + "31234", + "31244", + "31245", + "31251", + "31252", + "31258", + "31267", + "31275", + "31280", + "31281", + "31282", + "31292", + "31306", + "31307", + "31308", + "31311", + "31312", + "31313", + "31320", + "31330", + "31350", + "31358", + "31359", + "31363", + "31365", + "31381", + "31393", + "31395", + "31396", + "31405", + "31408", + "31414", + "31416", + "31425", + "31426", + "31429", + "31434", + "31437", + "31440", + "31443", + "31448", + "31460", + "31463", + "31469", + "31478", + "31482", + "31485", + "31490", + "31503", + "31509", + "31521", + "31527", + "31538", + "31541", + "31543", + "31546", + "31552", + "31554", + "31563", + "31564", + "31573", + "31579", + "31589", + "31601", + "31602", + "31614", + "31619", + "31623", + "31636", + "31648", + "31654", + "31659", + "31678", + "31688", + "31689", + "31693", + "31711", + "31717", + "31721", + "31725", + "31727", + "31729", + "31731", + "31733", + "31737", + "31740", + "31742", + "31745", + "31748", + "31764", + "31769", + "31772", + "31777", + "31779", + "31785", + "31796", + "31801", + "31810", + "31813", + "31818", + "31819", + "31821", + "31823", + "31824", + "31825", + "31826", + "31828", + "31830", + "31837", + "31845", + "31847", + "31850", + "31851", + "31855", + "31856", + "31857", + "31866", + "31883", + "31889", + "31892", + "31903", + "31907", + "31909", + "31915", + "31919", + "31922", + "31924", + "31927", + "31928", + "31944", + "31945", + "31958", + "31960", + "31963", + "31964", + "31966", + "31971", + "31973", + "31980", + "31986", + "31991", + "31992", + "31994", + "31997", + "32011", + "32016", + "32020", + "32027", + "32029", + "32031", + "32034", + "32039", + "32057", + "32065", + "32073", + "32074", + "32080", + "32082", + "32083", + "32089", + "32091", + "32097", + "32099", + "32100", + "32101", + "32107", + "32109", + "32115", + "32128", + "32141", + "32148", + "32156", + "32177", + "32178", + "32184", + "32187", + "32194", + "32195", + "32196", + "32197", + "32201", + "32212", + "32213", + "32225", + "32231", + "32237", + "32241", + "32247", + "32249", + "32250", + "32265", + "32268", + "32270", + "32276", + "32277", + "32280", + "32281", + "32285", + "32287", + "32288", + "32293", + "32296", + "32305", + "32307", + "32314", + "32326", + "32331", + "32332", + "32342", + "32347", + "32350", + "32362", + "32368", + "32370", + "32376", + "32377", + "32382", + "32385", + "32387", + "32395", + "32412", + "32415", + "32421", + "32430", + "32431", + "32434", + "32435", + "32437", + "32439", + "32452", + "32460", + "32465", + "32467", + "32471", + "32473", + "32474", + "32485", + "32492", + "32495", + "32499", + "32509", + "32515", + "32519", + "32525", + "32527", + "32538", + "32545", + "32551", + "32564", + "32567", + "32568", + "32578", + "32590", + "32601", + "32603", + "32604", + "32607", + "32609", + "32610", + "32613", + "32615", + "32630", + "32631", + "32634", + "32645", + "32646", + "32659", + "32661", + "32665", + "32673", + "32675", + "32678", + "32682", + "32701", + "32702", + "32704", + "32705", + "32709", + "32717", + "32732", + "32742", + "32756", + "32759", + "32763", + "32771", + "32773", + "32774", + "32777", + "32779", + "32781", + "32783", + "32787", + "32791", + "32796", + "32805", + "32808", + "32815", + "32821", + "32826", + "32833", + "32836", + "32847", + "32852", + "32854", + "32858", + "32867", + "32872", + "32884", + "32886", + "32903", + "32907", + "32914", + "32921", + "32922", + "32934", + "32936", + "32941", + "32945", + "32948", + "32963", + "32964", + "32968", + "32976", + "32980", + "32983", + "32984", + "33007", + "33010", + "33025", + "33027", + "33032", + "33035", + "33037", + "33049", + "33050", + "33053", + "33054", + "33057", + "33066", + "33067", + "33073", + "33077", + "33079", + "33085", + "33086", + "33087", + "33091", + "33095", + "33097", + "33104", + "33112", + "33114", + "33121", + "33122", + "33123", + "33133", + "33138", + "33139", + "33140", + "33141", + "33143", + "33158", + "33161", + "33174", + "33175", + "33176", + "33184", + "33189", + "33191", + "33198", + "33201", + "33207", + "33213", + "33217", + "33218", + "33219", + "33227", + "33231", + "33234", + "33237", + "33238", + "33239", + "33252", + "33256", + "33257", + "33273", + "33279", + "33283", + "33286", + "33287", + "33288", + "33292", + "33295", + "33300", + "33302", + "33303", + "33305", + "33311", + "33318", + "33320", + "33323", + "33325", + "33330", + "33335", + "33337", + "33350", + "33358", + "33363", + "33375", + "33377", + "33383", + "33385", + "33391", + "33394", + "33397", + "33419", + "33437", + "33445", + "33458", + "33460", + "33464", + "33465", + "33470", + "33473", + "33491", + "33494", + "33496", + "33497", + "33499", + "33508", + "33509", + "33517", + "33520", + "33526", + "33530", + "33531", + "33532", + "33536", + "33544", + "33551", + "33552", + "33563", + "33564", + "33566", + "33567", + "33575", + "33584", + "33589", + "33590", + "33598", + "33609", + "33615", + "33616", + "33633", + "33635", + "33638", + "33639", + "33641", + "33645", + "33647", + "33656", + "33661", + "33669", + "33677", + "33685", + "33692", + "33703", + "33706", + "33721", + "33722", + "33726", + "33729", + "33735", + "33742", + "33748", + "33749", + "33760", + "33770", + "33801", + "33802", + "33811", + "33814", + "33816", + "33819", + "33822", + "33829", + "33832", + "33840", + "33851", + "33868", + "33871", + "33874", + "33882", + "33886", + "33888", + "33892", + "33903", + "33909", + "33912", + "33916", + "33918", + "33919", + "33922", + "33926", + "33927", + "33935", + "33940", + "33944", + "33946", + "33951", + "33962", + "33965", + "33968", + "33971", + "33981", + "33989", + "33993", + "34011", + "34021", + "34034", + "34048", + "34053", + "34057", + "34067", + "34068", + "34070", + "34079", + "34082", + "34088", + "34110", + "34111", + "34113", + "34120", + "34124", + "34140", + "34155", + "34159", + "34164", + "34178", + "34180", + "34193", + "34200", + "34202", + "34214", + "34215", + "34223", + "34232", + "34234", + "34241", + "34244", + "34248", + "34252", + "34254", + "34266", + "34270", + "34271", + "34278", + "34279", + "34280", + "34284", + "34305", + "34306", + "34310", + "34311", + "34326", + "34361", + "34362", + "34363", + "34367", + "34368", + "34369", + "34383", + "34385", + "34394", + "34397", + "34401", + "34402", + "34403", + "34404", + "34428", + "34440", + "34445", + "34450", + "34456", + "34459", + "34460", + "34461", + "34467", + "34481", + "34482", + "34485", + "34486", + "34496", + "34497", + "34500", + "34501", + "34504", + "34506", + "34507", + "34514", + "34520", + "34533", + "34541", + "34548", + "34551", + "34552", + "34559", + "34560", + "34569", + "34573", + "34589", + "34595", + "34599", + "34606", + "34611", + "34614", + "34620", + "34628", + "34630", + "34631", + "34633", + "34641", + "34650", + "34656", + "34659", + "34679", + "34684", + "34687", + "34688", + "34698", + "34706", + "34708", + "34721", + "34723", + "34728", + "34730", + "34731", + "34739", + "34749", + "34754", + "34758", + "34761", + "34764", + "34774", + "34775", + "34783", + "34794", + "34796", + "34806", + "34809", + "34820", + "34821", + "34825", + "34842", + "34850", + "34860", + "34873", + "34876", + "34879", + "34880", + "34881", + "34892", + "34893", + "34894", + "34895", + "34912", + "34913", + "34916", + "34918", + "34925", + "34931", + "34932", + "34933", + "34937", + "34940", + "34947", + "34948", + "34951", + "34957", + "34958", + "34960", + "34967", + "34969", + "34970", + "34989", + "34995", + "34997", + "35002", + "35005", + "35022", + "35023", + "35044", + "35045", + "35046", + "35051", + "35061", + "35086", + "35089", + "35092", + "35095", + "35106", + "35113", + "35128", + "35132", + "35142", + "35146", + "35147", + "35159", + "35161", + "35167", + "35174", + "35184", + "35192", + "35196", + "35224", + "35227", + "35237", + "35241", + "35242", + "35256", + "35264", + "35270", + "35274", + "35279", + "35282", + "35296", + "35297", + "35302", + "35306", + "35308", + "35312", + "35313", + "35317", + "35318", + "35326", + "35334", + "35341", + "35352", + "35353", + "35355", + "35356", + "35360", + "35362", + "35375", + "35379", + "35382", + "35385", + "35400", + "35408", + "35415", + "35428", + "35431", + "35432", + "35451", + "35454", + "35455", + "35458", + "35466", + "35467", + "35479", + "35481", + "35484", + "35487", + "35490", + "35492", + "35499", + "35501", + "35510", + "35514", + "35522", + "35526", + "35529", + "35530", + "35536", + "35540", + "35542", + "35549", + "35555", + "35559", + "35561", + "35563", + "35564", + "35565", + "35566", + "35575", + "35577", + "35580", + "35585", + "35587", + "35589", + "35591", + "35595", + "35610", + "35617", + "35622", + "35636", + "35640", + "35650", + "35653", + "35658", + "35660", + "35661", + "35669", + "35673", + "35674", + "35676", + "35682", + "35683", + "35686", + "35687", + "35689", + "35691", + "35692", + "35693", + "35697", + "35701", + "35705", + "35711", + "35713", + "35728", + "35735", + "35738", + "35739", + "35746", + "35750", + "35754", + "35757", + "35780", + "35784", + "35813", + "35822", + "35827", + "35828", + "35829", + "35831", + "35833", + "35841", + "35853", + "35854", + "35861", + "35862", + "35864", + "35866", + "35869", + "35871", + "35883", + "35888", + "35890", + "35892", + "35894", + "35895", + "35897", + "35898", + "35899", + "35903", + "35908", + "35910", + "35915", + "35922", + "35939", + "35950", + "35965", + "35968", + "35990", + "35992", + "35993", + "36018", + "36021", + "36035", + "36036", + "36043", + "36046", + "36050", + "36051", + "36056", + "36088", + "36090", + "36096", + "36101", + "36104", + "36119", + "36125", + "36127", + "36136", + "36145", + "36148", + "36150", + "36155", + "36169", + "36184", + "36195", + "36198", + "36203", + "36204", + "36214", + "36219", + "36224", + "36226", + "36258", + "36260", + "36265", + "36267", + "36270", + "36274", + "36279", + "36282", + "36286", + "36289", + "36303", + "36304", + "36312", + "36321", + "36323", + "36326", + "36329", + "36335", + "36352", + "36353", + "36362", + "36367", + "36382", + "36400", + "36405", + "36410", + "36415", + "36424", + "36425", + "36427", + "36446", + "36449", + "36453", + "36456", + "36457", + "36458", + "36468", + "36472", + "36473", + "36476", + "36486", + "36490", + "36498", + "36500", + "36505", + "36507", + "36511", + "36522", + "36529", + "36532", + "36533", + "36562", + "36564", + "36566", + "36573", + "36574", + "36575", + "36586", + "36588", + "36598", + "36605", + "36607", + "36610", + "36612", + "36613", + "36614", + "36616", + "36619", + "36625", + "36629", + "36660", + "36661", + "36669", + "36670", + "36676", + "36679", + "36695", + "36698", + "36699", + "36702", + "36710", + "36712", + "36718", + "36719", + "36728", + "36729", + "36747", + "36750", + "36753", + "36754", + "36755", + "36770", + "36773", + "36776", + "36780", + "36785", + "36788", + "36791", + "36797", + "36803", + "36812", + "36818", + "36833", + "36849", + "36862", + "36865", + "36866", + "36870", + "36888", + "36899", + "36900", + "36901", + "36905", + "36907", + "36912", + "36924", + "36931", + "36942", + "36948", + "36956", + "36958", + "36971", + "36984", + "36986", + "36994", + "36995", + "36997", + "36998", + "37005", + "37007", + "37010", + "37015", + "37017", + "37018", + "37028", + "37035", + "37046", + "37054", + "37055", + "37056", + "37067", + "37071", + "37077", + "37087", + "37090", + "37092", + "37096", + "37102", + "37107", + "37113", + "37120", + "37140", + "37144", + "37145", + "37172", + "37182", + "37187", + "37188", + "37194", + "37199", + "37200", + "37207", + "37225", + "37241", + "37242", + "37249", + "37258", + "37259", + "37265", + "37267", + "37272", + "37277", + "37279", + "37280", + "37293", + "37304", + "37310", + "37313", + "37315", + "37319", + "37322", + "37323", + "37327", + "37333", + "37335", + "37339", + "37341", + "37344", + "37349", + "37351", + "37355", + "37361", + "37363", + "37385", + "37406", + "37411", + "37414", + "37417", + "37423", + "37427", + "37428", + "37435", + "37436", + "37439", + "37440", + "37441", + "37442", + "37453", + "37457", + "37471", + "37475", + "37476", + "37477", + "37497", + "37507", + "37517", + "37519", + "37524", + "37527", + "37530", + "37533", + "37534", + "37539", + "37540", + "37541", + "37545", + "37546", + "37550", + "37568", + "37570", + "37571", + "37575", + "37581", + "37585", + "37588", + "37610", + "37614", + "37615", + "37619", + "37626", + "37635", + "37636", + "37637", + "37638", + "37664", + "37666", + "37683", + "37686", + "37688", + "37698", + "37705", + "37711", + "37713", + "37716", + "37718", + "37721", + "37722", + "37737", + "37748", + "37750", + "37753", + "37759", + "37761", + "37762", + "37766", + "37767", + "37775", + "37782", + "37784", + "37786", + "37792", + "37795", + "37800", + "37804", + "37817", + "37820", + "37828", + "37837", + "37847", + "37853", + "37858", + "37859", + "37865", + "37876", + "37879", + "37883", + "37884", + "37887", + "37888", + "37894", + "37896", + "37900", + "37912", + "37917", + "37925", + "37926", + "37933", + "37935", + "37946", + "37959", + "37967", + "37980", + "37981", + "37983", + "37987", + "37997", + "38007", + "38009", + "38015", + "38027", + "38038", + "38042", + "38076", + "38084", + "38088", + "38093", + "38105", + "38107", + "38119", + "38124", + "38128", + "38129", + "38138", + "38140", + "38154", + "38165", + "38171", + "38172", + "38173", + "38176", + "38180", + "38189", + "38200", + "38207", + "38210", + "38213", + "38221", + "38222", + "38226", + "38239", + "38251", + "38270", + "38276", + "38282", + "38291", + "38297", + "38305", + "38308", + "38314", + "38318", + "38346", + "38372", + "38373", + "38380", + "38381", + "38382", + "38393", + "38394", + "38404", + "38406", + "38409", + "38410", + "38411", + "38413", + "38424", + "38425", + "38426", + "38428", + "38429", + "38431", + "38432", + "38454", + "38455", + "38456", + "38463", + "38466", + "38470", + "38471", + "38475", + "38476", + "38480", + "38482", + "38488", + "38491", + "38494", + "38495", + "38501", + "38506", + "38536", + "38541", + "38542", + "38548", + "38549", + "38553", + "38557", + "38562", + "38565", + "38573", + "38579", + "38585", + "38587", + "38600", + "38607", + "38625", + "38637", + "38646", + "38648", + "38657", + "38659", + "38664", + "38665", + "38675", + "38676", + "38680", + "38684", + "38693", + "38698", + "38699", + "38704", + "38706", + "38707", + "38710", + "38711", + "38716", + "38722", + "38727", + "38734", + "38741", + "38743", + "38745", + "38749", + "38757", + "38760", + "38781", + "38784", + "38786", + "38788", + "38789", + "38810", + "38824", + "38835", + "38838", + "38851", + "38852", + "38857", + "38867", + "38871", + "38875", + "38877", + "38884", + "38885", + "38888", + "38890", + "38893", + "38900", + "38911", + "38914", + "38922", + "38931", + "38937", + "38941", + "38942", + "38943", + "38945", + "38956", + "38961", + "38970", + "38974", + "38979", + "38987", + "38988", + "38994", + "39007", + "39021", + "39022", + "39029", + "39033", + "39036", + "39045", + "39048", + "39049", + "39052", + "39054", + "39056", + "39062", + "39065", + "39069", + "39072", + "39075", + "39077", + "39078", + "39081", + "39082", + "39090", + "39091", + "39092", + "39093", + "39094", + "39095", + "39097", + "39099", + "39100", + "39102", + "39107", + "39123", + "39129", + "39130", + "39131", + "39151", + "39153", + "39154", + "39158", + "39159", + "39165", + "39166", + "39175", + "39178", + "39180", + "39184", + "39202", + "39203", + "39205", + "39206", + "39208", + "39215", + "39223", + "39230", + "39236", + "39238", + "39239", + "39248", + "39275", + "39287", + "39291", + "39296", + "39301", + "39303", + "39305", + "39307", + "39320", + "39321", + "39323", + "39340", + "39341", + "39351", + "39368", + "39369", + "39373", + "39379", + "39385", + "39387", + "39404", + "39406", + "39410", + "39411", + "39419", + "39424", + "39425", + "39426", + "39427", + "39428", + "39431", + "39436", + "39439", + "39443", + "39455", + "39457", + "39468", + "39472", + "39474", + "39480", + "39497", + "39500", + "39511", + "39513", + "39516", + "39529", + "39535", + "39538", + "39554", + "39555", + "39556", + "39561", + "39566", + "39570", + "39573", + "39575", + "39608", + "39613", + "39614", + "39618", + "39619", + "39622", + "39626", + "39631", + "39638", + "39640", + "39641", + "39649", + "39653", + "39654", + "39658", + "39674", + "39676", + "39678", + "39697", + "39718", + "39723", + "39724", + "39729", + "39731", + "39736", + "39737", + "39740", + "39745", + "39747", + "39752", + "39756", + "39760", + "39761", + "39764", + "39765", + "39787", + "39789", + "39790", + "39791", + "39793", + "39794", + "39798", + "39801", + "39802", + "39805", + "39806", + "39815", + "39817", + "39822", + "39826", + "39830", + "39832", + "39850", + "39855", + "39870", + "39871", + "39878", + "39886", + "39887", + "39889", + "39890", + "39893", + "39912", + "39913", + "39921", + "39928", + "39944", + "39947", + "39955", + "39961", + "39964", + "39966", + "39969", + "39970", + "39973", + "39979", + "40014", + "40015", + "40022", + "40038", + "40041", + "40042", + "40053", + "40055", + "40056", + "40058", + "40060", + "40063", + "40068", + "40070", + "40091", + "40093", + "40096", + "40101", + "40117", + "40122", + "40127", + "40128", + "40131", + "40134", + "40138", + "40140", + "40143", + "40144", + "40164", + "40167", + "40169", + "40170", + "40177", + "40178", + "40180", + "40190", + "40193", + "40197", + "40200", + "40201", + "40202", + "40208", + "40213", + "40218", + "40224", + "40243", + "40247", + "40250", + "40252", + "40253", + "40263", + "40266", + "40268", + "40276", + "40277", + "40282", + "40294", + "40296", + "40299", + "40308", + "40321", + "40333", + "40348", + "40350", + "40353", + "40355", + "40358", + "40362", + "40367", + "40375", + "40377", + "40393", + "40394", + "40401", + "40408", + "40415", + "40416", + "40421", + "40424", + "40436", + "40442", + "40450", + "40457", + "40468", + "40470", + "40474", + "40478", + "40483", + "40498", + "40506", + "40525", + "40534", + "40535", + "40536", + "40539", + "40543", + "40548", + "40556", + "40561", + "40574", + "40575", + "40584", + "40587", + "40590", + "40592", + "40604", + "40607", + "40609", + "40619", + "40626", + "40651", + "40656", + "40660", + "40669", + "40674", + "40677", + "40686", + "40689", + "40691", + "40699", + "40702", + "40712", + "40715", + "40716", + "40723", + "40731", + "40757", + "40761", + "40773", + "40777", + "40782", + "40788", + "40795", + "40804", + "40818", + "40819", + "40821", + "40827", + "40828", + "40829", + "40837", + "40840", + "40841", + "40842", + "40845", + "40849", + "40850", + "40853", + "40864", + "40870", + "40874", + "40875", + "40881", + "40887", + "40889", + "40894", + "40897", + "40901", + "40906", + "40907", + "40918", + "40922", + "40924", + "40926", + "40931", + "40946", + "40952", + "40965", + "40968", + "40974", + "40975", + "40989", + "40995", + "40997", + "41003", + "41004", + "41005", + "41009", + "41012", + "41019", + "41020", + "41034", + "41037", + "41039", + "41044", + "41054", + "41064", + "41069", + "41072", + "41079", + "41083", + "41094", + "41096", + "41108", + "41122", + "41129", + "41132", + "41134", + "41156", + "41158", + "41160", + "41181", + "41193", + "41198", + "41202", + "41204", + "41210", + "41212", + "41214", + "41223", + "41226", + "41233", + "41261", + "41265", + "41270", + "41279", + "41285", + "41292", + "41293", + "41294", + "41299", + "41304", + "41313", + "41314", + "41322", + "41338", + "41345", + "41347", + "41349", + "41350", + "41352", + "41354", + "41355", + "41358", + "41359", + "41365", + "41377", + "41392", + "41398", + "41402", + "41405", + "41411", + "41412", + "41420", + "41422", + "41429", + "41434", + "41449", + "41452", + "41453", + "41456", + "41459", + "41460", + "41467", + "41470", + "41474", + "41480", + "41481", + "41483", + "41485", + "41490", + "41499", + "41500", + "41501", + "41506", + "41514", + "41516", + "41523", + "41528", + "41543", + "41547", + "41549", + "41555", + "41556", + "41558", + "41565", + "41572", + "41573", + "41576", + "41579", + "41581", + "41588", + "41605", + "41625", + "41627", + "41633", + "41637", + "41638", + "41643", + "41645", + "41650", + "41653", + "41665", + "41666", + "41667", + "41668", + "41670", + "41678", + "41685", + "41691", + "41693", + "41695", + "41696", + "41699", + "41717", + "41728", + "41729", + "41736", + "41748", + "41771", + "41775", + "41795", + "41797", + "41806", + "41811", + "41814", + "41826", + "41834", + "41838", + "41843", + "41848", + "41849", + "41852", + "41858", + "41860", + "41872", + "41874", + "41876", + "41882", + "41888", + "41895", + "41899", + "41900", + "41908", + "41912", + "41917", + "41920", + "41922", + "41931", + "41942", + "41949", + "41950", + "41955", + "41960", + "41965", + "41972", + "41976", + "41982", + "41989", + "42000", + "42009", + "42012", + "42014", + "42016", + "42022", + "42026", + "42028", + "42047", + "42052", + "42069", + "42070", + "42071", + "42077", + "42078", + "42081", + "42087", + "42089", + "42091", + "42118", + "42122", + "42126", + "42130", + "42138", + "42144", + "42147", + "42153", + "42164", + "42166", + "42168", + "42169", + "42179", + "42181", + "42187", + "42193", + "42200", + "42205", + "42211", + "42212", + "42215", + "42217", + "42231", + "42236", + "42244", + "42256", + "42265", + "42275", + "42281", + "42288", + "42294", + "42297", + "42304", + "42309", + "42310", + "42311", + "42312", + "42313", + "42318", + "42325", + "42332", + "42335", + "42338", + "42342", + "42345", + "42346", + "42355", + "42363", + "42366", + "42368", + "42369", + "42371", + "42372", + "42385", + "42387", + "42418", + "42419", + "42423", + "42425", + "42428", + "42434", + "42440", + "42444", + "42448", + "42454", + "42458", + "42465", + "42472", + "42475", + "42477", + "42486", + "42488", + "42495", + "42499", + "42512", + "42513", + "42514", + "42515", + "42523", + "42526", + "42527", + "42531", + "42534", + "42540", + "42542", + "42549", + "42550", + "42555", + "42561", + "42569", + "42580", + "42582", + "42588", + "42592", + "42598", + "42600", + "42615", + "42617", + "42626", + "42636", + "42648", + "42666", + "42681", + "42686", + "42706", + "42710", + "42719", + "42720", + "42723", + "42736", + "42747", + "42750", + "42757", + "42758", + "42759", + "42774", + "42777", + "42779", + "42782", + "42792", + "42793", + "42816", + "42823", + "42833", + "42873", + "42884", + "42888", + "42893", + "42898", + "42905", + "42906", + "42909", + "42910", + "42912", + "42920", + "42921", + "42922", + "42926", + "42928", + "42933", + "42938", + "42947", + "42948", + "42952", + "42955", + "42987", + "43000", + "43010", + "43016", + "43028", + "43031", + "43052", + "43054", + "43055", + "43060", + "43066", + "43067", + "43074", + "43078", + "43079", + "43088", + "43091", + "43099", + "43101", + "43107", + "43108", + "43112", + "43114", + "43126", + "43136", + "43147", + "43169", + "43170", + "43182", + "43189", + "43202", + "43204", + "43212", + "43217", + "43228", + "43233", + "43235", + "43240", + "43243", + "43262", + "43264", + "43265", + "43272", + "43279", + "43288", + "43289", + "43291", + "43309", + "43311", + "43324", + "43331", + "43335", + "43338", + "43350", + "43357", + "43364", + "43372", + "43380", + "43381", + "43382", + "43385", + "43392", + "43393", + "43395", + "43399", + "43400", + "43401", + "43402", + "43412", + "43427", + "43428", + "43432", + "43443", + "43446", + "43450", + "43454", + "43457", + "43462", + "43467", + "43469", + "43470", + "43486", + "43488", + "43491", + "43494", + "43500", + "43505", + "43521", + "43522", + "43523", + "43527", + "43532", + "43538", + "43562", + "43564", + "43565", + "43571", + "43574", + "43581", + "43582", + "43588", + "43591", + "43592", + "43597", + "43601", + "43602", + "43604", + "43606", + "43607", + "43612", + "43628", + "43634", + "43644", + "43653", + "43654", + "43667", + "43676", + "43688", + "43689", + "43695", + "43710", + "43711", + "43713", + "43716", + "43717", + "43723", + "43733", + "43742", + "43751", + "43760", + "43771", + "43778", + "43783", + "43791", + "43798", + "43802", + "43805", + "43806", + "43819", + "43821", + "43825", + "43833", + "43837", + "43839", + "43854", + "43856", + "43859", + "43862", + "43864", + "43866", + "43870", + "43872", + "43874", + "43879", + "43887", + "43890", + "43897", + "43900", + "43908", + "43911", + "43915", + "43920", + "43928", + "43934", + "43938", + "43943", + "43946", + "43949", + "43955", + "43956", + "43960", + "43974", + "43982", + "43999", + "44007", + "44022", + "44026", + "44040", + "44042", + "44044", + "44045", + "44053", + "44054", + "44056", + "44057", + "44060", + "44061", + "44066", + "44078", + "44079", + "44084", + "44087", + "44096", + "44100", + "44102", + "44114", + "44130", + "44134", + "44135", + "44156", + "44163", + "44169", + "44172", + "44174", + "44187", + "44192", + "44200", + "44201", + "44202", + "44203", + "44216", + "44217", + "44220", + "44223", + "44224", + "44227", + "44230", + "44238", + "44242", + "44243", + "44244", + "44247", + "44255", + "44268", + "44269", + "44275", + "44278", + "44279", + "44281", + "44285", + "44286", + "44289", + "44294", + "44301", + "44307", + "44318", + "44319", + "44320", + "44334", + "44338", + "44339", + "44342", + "44350", + "44353", + "44354", + "44356", + "44362", + "44366", + "44367", + "44373", + "44374", + "44377", + "44390", + "44394", + "44400", + "44402", + "44405", + "44410", + "44415", + "44427", + "44429", + "44435", + "44441", + "44446", + "44458", + "44465", + "44467", + "44469", + "44471", + "44473", + "44480", + "44483", + "44496", + "44498", + "44508", + "44510", + "44515", + "44523", + "44524", + "44536", + "44555", + "44556", + "44559", + "44560", + "44561", + "44562", + "44569", + "44570", + "44574", + "44580", + "44587", + "44603", + "44608", + "44613", + "44617", + "44619", + "44624", + "44625", + "44629", + "44636", + "44638", + "44640", + "44641", + "44648", + "44654", + "44656", + "44663", + "44673", + "44691", + "44705", + "44708", + "44717", + "44748", + "44761", + "44762", + "44770", + "44772", + "44775", + "44778", + "44780", + "44784", + "44786", + "44787", + "44803", + "44811", + "44818", + "44829", + "44831", + "44833", + "44837", + "44849", + "44851", + "44852", + "44857", + "44858", + "44859", + "44861", + "44862", + "44870", + "44875", + "44882", + "44887", + "44893", + "44897", + "44898", + "44905", + "44909", + "44915", + "44916", + "44917", + "44918", + "44934", + "44936", + "44937", + "44938", + "44940", + "44949", + "44953", + "44959", + "44964", + "44972", + "44973", + "44974", + "44978", + "44984", + "44992", + "44995", + "44997", + "45020", + "45024", + "45028", + "45031", + "45048", + "45051", + "45068", + "45071", + "45076", + "45077", + "45079", + "45080", + "45087", + "45088", + "45099", + "45102", + "45104", + "45116", + "45122", + "45128", + "45136", + "45145", + "45150", + "45151", + "45158", + "45168", + "45170", + "45173", + "45179", + "45182", + "45183", + "45184", + "45185", + "45189", + "45207", + "45208", + "45210", + "45220", + "45231", + "45261", + "45264", + "45266", + "45269", + "45271", + "45289", + "45291", + "45295", + "45296", + "45309", + "45315", + "45316", + "45329", + "45345", + "45347", + "45350", + "45353", + "45364", + "45365", + "45366", + "45367", + "45370", + "45377", + "45378", + "45381", + "45388", + "45390", + "45398", + "45409", + "45412", + "45415", + "45425", + "45430", + "45446", + "45453", + "45455", + "45463", + "45475", + "45478", + "45490", + "45497", + "45499", + "45500", + "45503", + "45514", + "45523", + "45532", + "45537", + "45539", + "45540", + "45541", + "45542", + "45551", + "45563", + "45566", + "45570", + "45577", + "45582", + "45586", + "45605", + "45611", + "45614", + "45619", + "45625", + "45628", + "45630", + "45632", + "45635", + "45637", + "45638", + "45639", + "45644", + "45648", + "45649", + "45661", + "45667", + "45668", + "45671", + "45675", + "45691", + "45695", + "45703", + "45705", + "45707", + "45708", + "45715", + "45718", + "45719", + "45726", + "45729", + "45730", + "45731", + "45736", + "45741", + "45747", + "45755", + "45759", + "45761", + "45768", + "45769", + "45770", + "45771", + "45777", + "45781", + "45786", + "45802", + "45810", + "45813", + "45818", + "45821", + "45833", + "45835", + "45846", + "45848", + "45853", + "45871", + "45888", + "45890", + "45896", + "45897", + "45905", + "45909", + "45911", + "45915", + "45917", + "45919", + "45923", + "45925", + "45928", + "45930", + "45944", + "45950", + "45958", + "45959", + "45966", + "45967", + "45972", + "45976", + "45984", + "45987", + "45988", + "45992", + "45995", + "45997", + "46006", + "46009", + "46011", + "46019", + "46020", + "46022", + "46024", + "46030", + "46038", + "46042", + "46055", + "46058", + "46063", + "46067", + "46070", + "46071", + "46073", + "46078", + "46081", + "46089", + "46090", + "46092", + "46101", + "46105", + "46113", + "46118", + "46124", + "46131", + "46133", + "46139", + "46142", + "46144", + "46147", + "46158", + "46159", + "46161", + "46162", + "46164", + "46167", + "46179", + "46181", + "46182", + "46187", + "46214", + "46216", + "46218", + "46220", + "46232", + "46233", + "46246", + "46247", + "46248", + "46249", + "46251", + "46256", + "46264", + "46268", + "46279", + "46286", + "46292", + "46299", + "46301", + "46302", + "46311", + "46316", + "46325", + "46327", + "46333", + "46338", + "46342", + "46344", + "46351", + "46366", + "46369", + "46378", + "46380", + "46381", + "46382", + "46383", + "46388", + "46395", + "46408", + "46415", + "46417", + "46421", + "46422", + "46426", + "49162", + "49168", + "49169", + "49170", + "49178", + "49185", + "49186", + "49191", + "49194", + "49196", + "49198", + "49210", + "49218", + "49219", + "49223", + "49228", + "49239", + "49243", + "49249", + "49260", + "49267", + "49272", + "49278", + "49286", + "49297", + "49305", + "49306", + "49308", + "49319", + "49323", + "49327", + "49333", + "49341", + "49343", + "49344", + "49347", + "49356", + "49367", + "49369", + "49371", + "49396", + "49399", + "49401", + "49404", + "49405", + "49413", + "49416", + "49422", + "49426", + "49431", + "49434", + "49444", + "49445", + "49453", + "49459", + "49465", + "49468", + "49469", + "49480", + "49482", + "49491", + "49493", + "49503", + "49504", + "49506", + "49509", + "49511", + "49522", + "49525", + "49533", + "49538", + "49543", + "49561", + "49572", + "49576", + "49577", + "49579", + "49580", + "49585", + "49587", + "49593", + "49599", + "49609", + "49613", + "49618", + "49622", + "49636", + "49637", + "49645", + "49657", + "49683", + "49685", + "49695", + "49703", + "49708", + "49709", + "49720", + "49733", + "49737", + "49748", + "49754", + "49755", + "49761", + "49775", + "49776", + "49783", + "49798", + "49801", + "49808", + "49812", + "49815", + "49828", + "49833", + "49840", + "49841", + "49844", + "49849", + "49857", + "49861", + "49864", + "49866", + "49876", + "49890", + "49904", + "49914", + "49922", + "49931", + "49947", + "49951", + "49953", + "49964", + "49965", + "49972", + "49973", + "49978", + "49986", + "49996", + "50002", + "50007", + "50013", + "50017", + "50018", + "50034", + "50035", + "50037", + "50054", + "50063", + "50080", + "50081", + "50084", + "50098", + "50105", + "50107", + "50109", + "50110", + "50121", + "50123", + "50127", + "50138", + "50145", + "50147", + "50148", + "50154", + "50155", + "50160", + "50162", + "50166", + "50173", + "50181", + "50187", + "50188", + "50203", + "50213", + "50220", + "50229", + "50241", + "50247", + "50254", + "50268", + "50276", + "50289", + "50292", + "50299", + "50314", + "50320", + "50325", + "50346", + "50352", + "50353", + "50361", + "50368", + "50369", + "50372", + "50374", + "50378", + "50407", + "50408", + "50410", + "50418", + "50420", + "50425", + "50426", + "50432", + "50435", + "50440", + "50450", + "50451", + "50455", + "50463", + "50468", + "50472", + "50475", + "50482", + "50488", + "50497", + "50501", + "50503", + "50504", + "50519", + "50521", + "50528", + "50537", + "50540", + "50542", + "50545", + "50554", + "50559", + "50564", + "50566", + "50571", + "50575", + "50579", + "50590", + "50599", + "50603", + "50620", + "50624", + "50626", + "50637", + "50639", + "50640", + "50645", + "50649", + "50651", + "50663", + "50669", + "50687", + "50692", + "50695", + "50703", + "50712", + "50721", + "50724", + "50734", + "50743", + "50744", + "50762", + "50764", + "50767", + "50769", + "50773", + "50775", + "50776", + "50780", + "50792", + "50794", + "50803", + "50808", + "50810", + "50814", + "50817", + "50819", + "50824", + "50828", + "50832", + "50834", + "50852", + "50861", + "50867", + "50873", + "50875", + "50882", + "50899", + "50904", + "50909", + "50913", + "50921", + "50925", + "50927", + "50930", + "50936", + "50942", + "50944", + "50947", + "50952", + "50953", + "50961", + "50962", + "50975", + "50978", + "50981", + "50987", + "50994", + "51004", + "51008", + "51010", + "51011", + "51022", + "51024", + "51028", + "51032", + "51033", + "51034", + "51040", + "51041", + "51048", + "51050", + "51054", + "51070", + "51071", + "51078", + "51086", + "51087", + "51093", + "51094", + "51097", + "51110", + "51112", + "51114", + "51116", + "51117", + "51121", + "51122", + "51124", + "51132", + "51136", + "51138", + "51149", + "51156", + "51179", + "51198", + "51201", + "51202", + "51204", + "51210", + "51213", + "51217", + "51218", + "51220", + "51222", + "51228", + "51229", + "51241", + "51252", + "51261", + "51263", + "51268", + "51291", + "51292", + "51301", + "51311", + "51314", + "51316", + "51327", + "51348", + "51363", + "51371", + "51372", + "51378", + "51379", + "51384", + "51388", + "51389", + "51391", + "51400", + "51402", + "51411", + "51424", + "51425", + "51426", + "51429", + "51430", + "51435", + "51438", + "51447", + "51453", + "51459", + "51464", + "51465", + "51469", + "51476", + "51478", + "51481", + "51487", + "51493", + "51494", + "51497", + "51501", + "51503", + "51508", + "51513", + "51520", + "51523", + "51529", + "51533", + "51535", + "51537", + "51538", + "51547", + "51554", + "51559", + "51567", + "51586", + "51588", + "51589", + "51598", + "51605", + "51611", + "51616", + "51621", + "51626", + "51628", + "51634", + "51641", + "51648", + "51649", + "51671", + "51681", + "51688", + "51692", + "51700", + "51702", + "51713", + "51719", + "51723", + "51729", + "51732", + "51733", + "51748", + "51751", + "51755", + "51764", + "51769", + "51772", + "51773", + "51777", + "51778", + "51780", + "51789", + "51792", + "51803", + "51806", + "51817", + "51825", + "51833", + "51835", + "51836", + "51841", + "51847", + "51849", + "51852", + "51855", + "51856", + "51859", + "51861", + "51863", + "51864", + "51872", + "51877", + "51881", + "51887", + "51892", + "51897", + "51904", + "51906", + "51908", + "51912", + "51917", + "51926", + "51928", + "51929", + "51948", + "51951", + "51964", + "51971", + "51972", + "51973", + "51974", + "51975", + "51990", + "51992", + "51996", + "52000", + "52013", + "52021", + "52026", + "52030", + "52036", + "52039", + "52058", + "52060", + "52064", + "52070", + "52081", + "52082", + "52089", + "52092", + "52097", + "52104", + "52106", + "52116", + "52121", + "52122", + "52127", + "52133", + "52134", + "52140", + "52148", + "52152", + "52156", + "52161", + "52162", + "52167", + "52169", + "52173", + "52192", + "52193", + "52196", + "52209", + "52218", + "52228", + "52249", + "52253", + "52260", + "52261", + "52267", + "52269", + "52271", + "52272", + "52273", + "52288", + "52290", + "52301", + "52305", + "52306", + "52313", + "52315", + "52319", + "52322", + "52330", + "52342", + "52346", + "52351", + "52354", + "52363", + "52382", + "52386", + "52390", + "52392", + "52409", + "52427", + "52428", + "52436", + "52459", + "52462", + "52465", + "52485", + "52488", + "52500", + "52502", + "52506", + "52511", + "52516", + "52518", + "52520", + "52524", + "52525", + "52530", + "52548", + "52554", + "52555", + "52563", + "52572", + "52578", + "52584", + "52586", + "52587", + "52589", + "52591", + "52593", + "52609", + "52615", + "52617", + "52623", + "52628", + "52629", + "52631", + "52640", + "52648", + "52649", + "52651", + "52658", + "52670", + "52673", + "52676", + "52681", + "52686", + "52690", + "52698", + "52699", + "52710", + "52712", + "52729", + "52734", + "52742", + "52753", + "52755", + "52763", + "52770", + "52779", + "52781", + "52790", + "52793", + "52802", + "52804", + "52808", + "52817", + "52821", + "52834", + "52835", + "52837", + "52857", + "52858", + "52860", + "52863", + "52872", + "52873", + "52874", + "52878", + "52880", + "52890", + "52893", + "52907", + "52908", + "52911", + "52914", + "52925", + "52930", + "52931", + "52932", + "52936", + "52945", + "52961", + "52966", + "52967", + "52974", + "52976", + "52978", + "52981", + "52983", + "53002", + "53010", + "53022", + "53025", + "53028", + "53029", + "53030", + "53034", + "53039", + "53041", + "53042", + "53059", + "53066", + "53078", + "53081", + "53086", + "53087", + "53089", + "53093", + "53097", + "53099", + "53104", + "53114", + "53115", + "53116", + "53119", + "53121", + "53140", + "53145", + "53162", + "53172", + "53175", + "53180", + "53188", + "53190", + "53202", + "53203", + "53211", + "53212", + "53214", + "53221", + "53223", + "53233", + "53238", + "53239", + "53240", + "53242", + "53251", + "53252", + "53254", + "53255", + "53274", + "53290", + "53292", + "53294", + "53298", + "53301", + "53307", + "53313", + "53323", + "53334", + "53343", + "53367", + "53376", + "53382", + "53383", + "53392", + "53397", + "53405", + "53406", + "53408", + "53418", + "53419", + "53422", + "53423", + "53426", + "53428", + "53430", + "53432", + "53436", + "53443", + "53446", + "53451", + "53463", + "53464", + "53466", + "53469", + "53472", + "53474", + "53477", + "53492", + "53494", + "53497", + "53500", + "53509", + "53510", + "53515", + "53518", + "53535", + "53540", + "53550", + "53554", + "53569", + "53575", + "53582", + "53588", + "53609", + "53615", + "53617", + "53624", + "53629", + "53642", + "53647", + "53648", + "53654", + "53656", + "53657", + "53658", + "53659", + "53663", + "53673", + "53678", + "53680", + "53682", + "53686", + "53701", + "53703", + "53706", + "53711", + "53712", + "53729", + "53731", + "53734", + "53750", + "53763", + "53772", + "53777", + "53781", + "53786", + "53791", + "53796", + "53798", + "53803", + "53818", + "53823", + "53830", + "53832", + "53845", + "53847", + "53852", + "53858", + "53861", + "53867", + "53870", + "53879", + "53881", + "53884", + "53889", + "53895", + "53904", + "53918", + "53921", + "53925", + "53928", + "53930", + "53932", + "53933", + "53950", + "53955", + "53962", + "53963", + "53969", + "53972", + "53986", + "53992", + "53996", + "54024", + "54027", + "54029", + "54030", + "54032", + "54033", + "54035", + "54044", + "54047", + "54048", + "54049", + "54066", + "54067", + "54068", + "54072", + "54076", + "54078", + "54082", + "54086", + "54095", + "54109", + "54127", + "54132", + "54140", + "54141", + "54145", + "54148", + "54149", + "54155", + "54165", + "54187", + "54192", + "54194", + "54204", + "54213", + "54218", + "54225", + "54232", + "54251", + "54255", + "54259", + "54262", + "54270", + "54276", + "54279", + "54282", + "54285", + "54287", + "54293", + "54298", + "54301", + "54303", + "54304", + "54308", + "54312", + "54319", + "54334", + "54345", + "54348", + "54353", + "54354", + "54357", + "54361", + "54368", + "54374", + "54379", + "54383", + "54385", + "54392", + "54396", + "54397", + "54453", + "54462", + "54463", + "54467", + "54472", + "54481", + "54493", + "54495", + "54497", + "54499", + "54506", + "54511", + "54515", + "54523", + "54531", + "54532", + "54534", + "54535", + "54547", + "54549", + "54554", + "54565", + "54567", + "54580", + "54584", + "54585", + "54586", + "54599", + "54600", + "54601", + "54602", + "54607", + "54610", + "54615", + "54621", + "54628", + "54631", + "54636", + "54637", + "54640", + "54644", + "54645", + "54652", + "54655", + "54661", + "54669", + "54672", + "54676", + "54680", + "54689", + "54696", + "54700", + "54714", + "54716", + "54719", + "54721", + "54724", + "54729", + "54754", + "54756", + "54757", + "54762", + "54767", + "54769", + "54775", + "54776", + "54780", + "54787", + "54804", + "54812", + "54816", + "54837", + "54838", + "54842", + "54846", + "54847", + "54852", + "54863", + "54865", + "54869", + "54877", + "54888", + "54889", + "54891", + "54902", + "54905", + "54930", + "54931", + "54933", + "54939", + "54940", + "54948", + "54963", + "54964", + "54965", + "54967", + "54979", + "55003", + "55012", + "55016", + "55019", + "55022", + "55023", + "55024", + "55026", + "55038", + "55041", + "55043", + "55079", + "55096", + "55109", + "55116", + "55122", + "55123", + "55128", + "55134", + "55142", + "55145", + "55146", + "55147", + "55152", + "55165", + "55166", + "55182", + "55189", + "55190", + "55194", + "55200", + "55213", + "55222", + "55235", + "55250", + "55253", + "55254", + "55256", + "55261", + "55267", + "55269", + "55271", + "55278", + "55279", + "55281", + "55283", + "55296", + "55309", + "55310", + "55312", + "55315", + "55317", + "55329", + "55340", + "55346", + "55351", + "55352", + "55357", + "55364", + "55366", + "55371", + "55378", + "55379", + "55386", + "55391", + "55395", + "55397", + "55414", + "55419", + "55423", + "55437", + "55439", + "55443", + "55457", + "55465", + "55467", + "55470", + "55476", + "55480", + "55482", + "55503", + "55504", + "55514", + "55515", + "55523", + "55526", + "55537", + "55541", + "55544", + "55551", + "55565", + "55590", + "55592", + "55595", + "55627", + "55635", + "55638", + "55640", + "55642", + "55643", + "55644", + "55656", + "55661", + "55662", + "55668", + "55669", + "55672", + "55675", + "55689", + "55692", + "55715", + "55719", + "55720", + "55723", + "55725", + "55726", + "55728", + "55730", + "55733", + "55736", + "55737", + "55740", + "55751", + "55753", + "55759", + "55762", + "55767", + "55776", + "55785", + "55786", + "55805", + "55806", + "55807", + "55808", + "55822", + "55823", + "55824", + "55832", + "55852", + "55858", + "55860", + "55864", + "55869", + "55871", + "55873", + "55883", + "55884", + "55893", + "55895", + "55905", + "55912", + "55914", + "55923", + "55931", + "55932", + "55938", + "55940", + "55941", + "55942", + "55950", + "55955", + "55963", + "55973", + "55987", + "55991", + "56000", + "56002", + "56004", + "56009", + "56010", + "56013", + "56032", + "56035", + "56037", + "56038", + "56040", + "56057", + "56063", + "56064", + "56066", + "56067", + "56073", + "56074", + "56076", + "56086", + "56088", + "56094", + "56097", + "56110", + "56113", + "56114", + "56123", + "56124", + "56125", + "56142", + "56150", + "56161", + "56174", + "56178", + "56188", + "56191", + "56196", + "56198", + "56203", + "56204", + "56222", + "56227", + "56231", + "56233", + "56234", + "56239", + "56243", + "56244", + "56251", + "56262", + "56269", + "56273", + "56275", + "56276", + "56277", + "56279", + "56280", + "56281", + "56289", + "56301", + "56302", + "56304", + "56310", + "56320", + "56323", + "56333", + "56335", + "56338", + "56342", + "56348", + "56355", + "56357", + "56359", + "56360", + "56362", + "56363", + "56365", + "56376", + "56381", + "56383", + "56385", + "56395", + "56401", + "56405", + "56419", + "56421", + "56425", + "56426", + "56429", + "56433", + "56446", + "56449", + "56461", + "56464", + "56469", + "56474", + "56482", + "56484", + "56488", + "56494", + "56503", + "56504", + "56509", + "56510", + "56512", + "56515", + "56518", + "56520", + "56534", + "56536", + "56537", + "56539", + "56545", + "56546", + "56553", + "56555", + "56567", + "56577", + "56579", + "56589", + "56590", + "56594", + "56608", + "56612", + "56615", + "56630", + "56637", + "56644", + "56645", + "56650", + "56660", + "56670", + "56674", + "56682", + "56685", + "56686", + "56691", + "56692", + "56705", + "56708", + "56711", + "56712", + "56720", + "56724", + "56731", + "56739", + "56741", + "56751", + "56753", + "56766", + "56771", + "56778", + "56781", + "56788", + "56795", + "56796", + "56803", + "56807", + "56814", + "56816", + "56825", + "56836", + "56840", + "56845", + "56877", + "56878", + "56888", + "56890", + "56896", + "56901", + "56903", + "56906", + "56916", + "56921", + "56930", + "56937", + "56940", + "56944", + "56945", + "56949", + "56960", + "56962", + "56969", + "56970", + "56975", + "56976", + "56983", + "56986", + "56991", + "57001", + "57010", + "57016", + "57018", + "57029", + "57036", + "57039", + "57053", + "57058", + "57060", + "57065", + "57067", + "57069", + "57070", + "57073", + "57074", + "57081", + "57085", + "57097", + "57104", + "57123", + "57137", + "57145", + "57146", + "57148", + "57151", + "57166", + "57175", + "57176", + "57180", + "57183", + "57193", + "57198", + "57199", + "57201", + "57206", + "57216", + "57221", + "57223", + "57224", + "57229", + "57233", + "57237", + "57247", + "57253", + "57260", + "57263", + "57277", + "57281", + "57283", + "57288", + "57296", + "57302", + "57313", + "57315", + "57317", + "57322", + "57323", + "57328", + "57329", + "57350", + "57353", + "57358", + "57360", + "57361", + "57362", + "57366", + "57383", + "57392", + "57404", + "57419", + "57420", + "57433", + "57434", + "57435", + "57438", + "57444", + "57456", + "57468", + "57474", + "57480", + "57485", + "57489", + "57500", + "57510", + "57512", + "57532", + "57537", + "57550", + "57559", + "57560", + "57567", + "57572", + "57574", + "57575", + "57579", + "57583", + "57585", + "57586", + "57588", + "57592", + "57602", + "57604", + "57607", + "57612", + "57622", + "57623", + "57626", + "57636", + "57639", + "57640", + "57648", + "57658", + "57660", + "57670", + "57673", + "57674", + "57688", + "57689", + "57692", + "57702", + "57703", + "57707", + "57713", + "57718", + "57729", + "57733", + "57736", + "57744", + "57746", + "57751", + "57752", + "57756", + "57766", + "57771", + "57773", + "57776", + "57791", + "57792", + "57794", + "57804", + "57806", + "57811", + "57814", + "57824", + "57827", + "57829", + "57830", + "57831", + "57838", + "57840", + "57841", + "57843", + "57846", + "57848", + "57863", + "57870", + "57871", + "57877", + "57880", + "57889", + "57895", + "57897", + "57906", + "57915", + "57920", + "57930", + "57933", + "57934", + "57937", + "57938", + "57942", + "57950", + "57952", + "57955", + "57961", + "57964", + "57966", + "57974", + "57979", + "57986", + "57989", + "57996", + "58000", + "58007", + "58008", + "58016", + "58028", + "58040", + "58041", + "58042", + "58059", + "58068", + "58069", + "58080", + "58082", + "58090", + "58097", + "58101", + "58114", + "58116", + "58117", + "58119", + "58124", + "58130", + "58132", + "58137", + "58147", + "58155", + "58158", + "58159", + "58160", + "58165", + "58172", + "58178", + "58179", + "58181", + "58182", + "58187", + "58190", + "58216", + "58227", + "58229", + "58237", + "58248", + "58254", + "58259", + "58275", + "58282", + "58294", + "58297", + "58302", + "58311", + "58316", + "58318", + "58319", + "58321", + "58327", + "58356", + "58369", + "58381", + "58394", + "58395", + "58398", + "58403", + "58404", + "58421", + "58430", + "58434", + "58435", + "58448", + "58453", + "58455", + "58466", + "58469", + "58478", + "58480", + "58486", + "58495", + "58497", + "58499", + "58503", + "58505", + "58507", + "58513", + "58522", + "58523", + "58524", + "58533", + "58535", + "58540", + "58543", + "58551", + "58552", + "58560", + "58586", + "58593", + "58601", + "58602", + "58603", + "58614", + "58618", + "58638", + "58640", + "58644", + "58646", + "58647", + "58654", + "58655", + "58656", + "58658", + "58676", + "58677", + "58678", + "58687", + "58690", + "58692", + "58694", + "58700", + "58706", + "58734", + "58735", + "58738", + "58740", + "58752", + "58761", + "58764", + "58772", + "58776", + "58787", + "58797", + "58815", + "58821", + "58824", + "58832", + "58835", + "58839", + "58840", + "58843", + "58846", + "58854", + "58858", + "58861", + "58865", + "58871", + "58872", + "58887", + "58890", + "58891", + "58908", + "58914", + "58919", + "58924", + "58928", + "58931", + "58939", + "58942", + "58952", + "58954", + "58961", + "58963", + "58965", + "58966", + "58967", + "58974", + "58986", + "59000", + "59003", + "59006", + "59007", + "59016", + "59036", + "59039", + "59046", + "59050", + "59051", + "59054", + "59055", + "59058", + "59059", + "59067", + "59069", + "59070", + "59071", + "59072", + "59074", + "59081", + "59082", + "59085", + "59086", + "59088", + "59092", + "59093", + "59096", + "59099", + "59101", + "59105", + "59113", + "59123", + "59124", + "59130", + "59133", + "59134", + "59135", + "59137", + "59139", + "59141", + "59142", + "59144", + "59147", + "59149", + "59151", + "59153", + "59162", + "59172", + "59179", + "59182", + "59184", + "59200", + "59203", + "59206", + "59213", + "59234", + "59238", + "59239", + "59241", + "59253", + "59257", + "59261", + "59263", + "59269", + "59283", + "59289", + "59291", + "59292", + "59298", + "59299", + "59304", + "59308", + "59310", + "59311", + "59318", + "59320", + "59323", + "59326", + "59327", + "59329", + "59332", + "59334", + "59337", + "59341", + "59342", + "59348", + "59351", + "59353", + "59368", + "59371", + "59386", + "59398", + "59415", + "59417", + "59419", + "59423", + "59443", + "59445", + "59450", + "59453", + "59456", + "59461", + "59465", + "59472", + "59479", + "59480", + "59481", + "59487", + "59501", + "59502", + "59513", + "59521", + "59523", + "59525", + "59537", + "59544", + "59556", + "59561", + "59562", + "59563", + "59567", + "59570", + "59574", + "59581", + "59588", + "59597", + "59600", + "59604", + "59606", + "59608", + "59615", + "59616", + "59633", + "59639", + "59640", + "59644", + "59645", + "59650", + "59654", + "59655", + "59657", + "59664", + "59666", + "59675", + "59676", + "59693", + "59695", + "59719", + "59727", + "59736", + "59747", + "59749", + "59751", + "59754", + "59757", + "59758", + "59766", + "59782", + "59785", + "59794", + "59795", + "59813", + "59821", + "59822", + "59823", + "59825", + "59834", + "59848", + "59858", + "59862", + "59879", + "59881", + "59886", + "59889", + "59892", + "59893", + "59897", + "59900", + "59901", + "59912", + "59922", + "59927", + "59932", + "59933", + "59941", + "59962", + "59966", + "59980", + "59997", + "59999", + "60010", + "60014", + "60020", + "60023", + "60039", + "60052", + "60067", + "60069", + "60075", + "60089", + "60102", + "60105", + "60107", + "60117", + "60119", + "60124", + "60128", + "60135", + "60148", + "60149", + "60154", + "60162", + "60164", + "60171", + "60175", + "60177", + "60183", + "60189", + "60195", + "60200", + "60209", + "60215", + "60218", + "60219", + "60226", + "60233", + "60241", + "60244", + "60245", + "60250", + "60251", + "60269", + "60270", + "60277", + "60280", + "60285", + "60286", + "60288", + "60289", + "60292", + "60301", + "60307", + "60313", + "60317", + "60318", + "60319", + "60322", + "60327", + "60329", + "60334", + "60351", + "60352", + "60355", + "60360", + "60369", + "60395", + "60396", + "60403", + "60407", + "60408", + "60418", + "60419", + "60421", + "60427", + "60428", + "60434", + "60436", + "60442", + "60443", + "60447", + "60456", + "60457", + "60461", + "60462", + "60471", + "60477", + "60479", + "60487", + "60492", + "60503", + "60507", + "60520", + "60529", + "60562", + "60566", + "60573", + "60576", + "60596", + "60604", + "60612", + "60619", + "60621", + "60629", + "60638", + "60651", + "60652", + "60653", + "60655", + "60662", + "60663", + "60667", + "60674", + "60680", + "60683", + "60687", + "60693", + "60696", + "60702", + "60705", + "60708", + "60714", + "60715", + "60726", + "60734", + "60744", + "60751", + "60753", + "60754", + "60757", + "60758", + "60771", + "60784", + "60789", + "60793", + "60802", + "60803", + "60814", + "60818", + "60828", + "60833", + "60837", + "60838", + "60841", + "60852", + "60858", + "60860", + "60864", + "60893", + "60895", + "60898", + "60910", + "60915", + "60919", + "60927", + "60930", + "60938", + "60939", + "60947", + "60950", + "60956", + "60957", + "60960", + "60967", + "60970", + "60972", + "60981", + "60985", + "60996", + "61005", + "61006", + "61008", + "61009", + "76940", + "77544", + "77646", + "77687", + "77845", + "78242", + "78262", + "78420", + "78693", + "79391", + "79432", + "79806", + "79902", + "79974", + "80186", + "80269", + "80294", + "80461", + "80496", + "80865", + "80941", + "80952", + "81038", + "81057", + "81174", + "81392", + "81544", + "81748", + "81939", + "82086", + "82194", + "82215", + "82391", + "82626", + "82763", + "82851", + "82877", + "82894", + "82965", + "83159", + "84447", + "84651", + "84657", + "84769", + "84781", + "84893", + "85046", + "85099", + "85105", + "85284", + "85285", + "85318", + "85457", + "85459", + "85645", + "85730", + "86116", + "86125", + "86243", + "86667", + "86991", + "87027", + "87381", + "87410", + "87424", + "87679", + "87820", + "87844", + "87873", + "87899", + "88232", + "88255", + "88268", + "88321", + "88395", + "88481", + "88566", + "89119", + "89418", + "89545", + "89700", + "89724", + "89760", + "90098", + "90328", + "90523", + "91139", + "91232", + "91457", + "91493", + "91545", + "91676", + "91752", + "91991", + "92215", + "92364", + "92517", + "92591", + "92772", + "92866", + "93049", + "93079", + "93203", + "93680", + "94170", + "94177", + "94351", + "94416", + "94436", + "94465", + "94664", + "95069", + "95673", + "95761", + "95926", + "95988", + "96001", + "96146", + "96307", + "96754", + "96972", + "96976", + "97021", + "97429", + "98083", + "98114", + "98252", + "98294", + "98398", + "98703", + "98784", + "99358", + "99418", + "99478", + "99932", + "99943" + ], + "seed": 42, + "val_ratio": 0.2, + "fusion_type": "mlp", + "loss_type": "sce", + "split": "stratified_group" +} \ No newline at end of file diff --git a/DMS/dinov3_siglip2_gated/README.md b/DMS/dinov3_siglip2_gated/README.md new file mode 100644 index 0000000000000000000000000000000000000000..7d4b2fc6f17f40bf5dbed79fd11cc3584f3ebeea --- /dev/null +++ b/DMS/dinov3_siglip2_gated/README.md @@ -0,0 +1,52 @@ +# DINOv3-SigLIP2 + Gated Multimodal Unit on Apple Dense Material Segmentation + +A material-classification **fusion head** from SegObjectMaterial. It classifies the +material of a masked object from two frozen embeddings: + +| | | +|---|---| +| vision | DINOv3 ViT-L/16 (CLS token, frozen) -> 1024-d | +| language | SigLIP2 base text encoder over Qwen3-VL-8B captions (frozen) -> 768-d | +| head | Gated Multimodal Unit (`gated`, defaults), 1,985,081 parameters | +| classes | 57 (Apple Dense Material Segmentation) | + +**This repo holds only the head.** Features must come from the same encoders, +captioner and prompts as training (see the SegObjectMaterial repository); the +encoders are downloaded from their own model pages under their own licenses. + +## Evaluation + +Held-out split recorded in `split.json` (source images never seen in training). +Single training run -- differences under ~0.5 mIoU points between heads are within +run-to-run noise. + +| mIoU | mAcc | eval samples | +|---|---|---| +| 0.4630 | 0.6386 | 186,231 | + +## Training + +```json +{ + "learning_rate": 5e-05, + "epochs": 50, + "batch_size": 32, + "weight_decay": 0.0001, + "lr_schedule": "constant", + "early_stopping_patience": 0, + "checkpoint": "best validation loss" +} +``` + +## Use + +```python +from utils.hub import load_head_from_hub # SegObjectMaterial repository +head, info = load_head_from_hub("s0um0r0y/SegObjectMaterial", "DMS/dinov3_siglip2_gated") +logits = head(vision_features, language_features) # [B, 1024], [B, 768] +``` + +## Integrity + +- `model.safetensors` sha256 `8c71607a87521793b66f1fc13ba984fe2b6954774b0caad559ae94d72de33b12` +- source config `config/config.toml`, code commit `1a8130c922267fb0786a33e3854a7e00763cc38f+dirty` diff --git a/DMS/dinov3_siglip2_gated/config.toml b/DMS/dinov3_siglip2_gated/config.toml new file mode 100644 index 0000000000000000000000000000000000000000..820eff10f703d30cef2b633f7d9a14366e49b9f2 --- /dev/null +++ b/DMS/dinov3_siglip2_gated/config.toml @@ -0,0 +1,59 @@ +# Apple DMS -- LATEST-MODELS pipeline: DINOv3 ViT-L/16 (1024) + Qwen3-VL -> SigLIP2 text (768) +# +# Pair this with: +# src/vision_stream_latest_models.py + src/language_stream_latest_models.py +# run_serialization_latest_models.py -> train_latest_models.py +# +# For the base DINOv2/CLIP pipeline (run_serialization.py -> train.py) use +# config/config_dinov2_clip.toml instead -- its vision_dim is 768, not 1024. + +[data] +dataset_type = "apple_dms" +image_dir = "/images" +mask_dir = "/labels" +# Rebuilt automatically on first run; the index now stores one entry per +# CONNECTED COMPONENT, so any pre-existing labels.json must be removed first. +labels_file = "/labels_instances.json" +# Separate cache: DINOv3 features are 1024-d and must not mix with the +# 768-d DINOv2 cache written by run_serialization.py. +tensor_cache_dir = "/tensor_cache_dir_latest_models" + +# Connected-component filtering (measured on 400 real DMS masks): +# keeping every component gives 7.5x more samples than the old per-(image,class) +# scheme -- 2.45M samples / 47 GB / ~7.5x the VLM captioning time -- because 69% +# of components are under 0.1% of the frame and crop to a few pixels. +# A component is kept when area >= max(min_instance_area, min_instance_frac * frame). +min_instance_area = 1000 # absolute pixel floor +min_instance_frac = 0.001 # and at least 0.1% of the frame +max_instances_per_class = 0 # 0 = keep all; set e.g. 3 to cap the long tail + + +[model] +# fusion head: "gated" (GMU) or "mlp" (concat+MLP). Read by train_latest_models.py; a contradicting --fusion flag is an error, so checkpoint_path can't hold the wrong head. +fusion = "gated" +vision_dim = 1024 # DINOv3 ViT-L/16 CLS token +language_dim = 768 # SigLIP2 base text embedding +num_classes = 57 + +[training] +batch_size = 32 + +# Batch size for the OFFLINE SERIALIZATION pass, which is a completely different +# memory regime from training: it pushes full-resolution images through the 7B +# VLM, whereas [training].batch_size only moves cached 768-d vectors through a +# small MLP. Measured on the 23.6 GiB 4090 -- static weights 16.2 GiB, so only +# ~7.4 GiB is left: batch 8 peaks at 17.7 GiB, 16 at 19.2 GiB, and 32 OOMs. +# 8 leaves headroom for a labmate's job to coexist; raise to 16 on a free card. +serialization_batch_size = 8 +learning_rate = 5e-5 +epochs = 50 +train_ratio = 0.8 # 80% for training +val_ratio = 0.2 # 20% for validation +tensorboard_log_dir = "/dms_dinov3_siglip2" + +[inference] +checkpoint_path = "/best_model_SigLIP_DINOv3.pth" + +[logging] +wandb_project = "material-classification" +wandb_run_name = "dinov3-siglip2" diff --git a/DMS/dinov3_siglip2_gated/head.json b/DMS/dinov3_siglip2_gated/head.json new file mode 100644 index 0000000000000000000000000000000000000000..4ac261dce0cdeed7741548437eb9a22c4ac5d056 --- /dev/null +++ b/DMS/dinov3_siglip2_gated/head.json @@ -0,0 +1,99 @@ +{ + "fusion": "gated", + "head": "Gated Multimodal Unit", + "head_kwargs": {}, + "vision_dim": 1024, + "language_dim": 768, + "num_classes": 57, + "classes": [ + "No label", + "Animal skin", + "Bone/teeth/horn", + "Brickwork", + "Cardboard", + "Carpet/rug", + "Ceiling tile", + "Ceramic", + "Chalkboard/blackboard", + "Clutter", + "Concrete", + "Cork/corkboard", + "Engineered stone", + "Fabric/cloth", + "Fiberglass wool", + "Fire", + "Foliage", + "Food", + "Fur", + "Gemstone/quartz", + "Glass", + "Hair", + "I cannot tell", + "Ice", + "Leather", + "Liquid, non-water", + "Metal", + "Mirror", + "Not on list", + "Paint/plaster/enamel", + "Paper", + "Pearl", + "Photograph/painting", + "Plastic, clear", + "Plastic, non-clear", + "Rubber/latex", + "Sand", + "Skin/lips", + "Sky", + "Snow", + "Soap", + "Soil/mud", + "Sponge", + "Stone, natural", + "Stone, polished", + "Styrofoam", + "Tile", + "Wallpaper", + "Water", + "Wax", + "Whiteboard", + "Wicker", + "Wood", + "Wood, tree", + "Bad polygon", + "Multiple materials", + "Asphalt" + ], + "dataset": "Apple Dense Material Segmentation", + "dataset_key": "DMS", + "encoders": { + "vision": "DINOv3 ViT-L/16 (CLS token, frozen)", + "language": "SigLIP2 base text encoder over Qwen3-VL-8B captions (frozen)", + "short": "DINOv3-SigLIP2", + "slug": "dinov3_siglip2" + }, + "parameters": 1985081, + "training": { + "learning_rate": 5e-05, + "epochs": 50, + "batch_size": 32, + "weight_decay": 0.0001, + "lr_schedule": "constant", + "early_stopping_patience": 0, + "checkpoint": "best validation loss" + }, + "sha256": { + "safetensors": "8c71607a87521793b66f1fc13ba984fe2b6954774b0caad559ae94d72de33b12", + "pth": "5751d9a8428036b671c11a9fc440931ad0888d497feb7b2a0f93271b4f18b293" + }, + "source": { + "config": "config/config.toml", + "git_commit": "1a8130c922267fb0786a33e3854a7e00763cc38f+dirty", + "checkpoint_mtime": "2026-09-27T16:03:35" + }, + "metrics": { + "mIoU": 0.4630038334240617, + "mAcc": 0.638554054441271, + "eval_samples": 186231 + } +} \ No newline at end of file diff --git a/DMS/dinov3_siglip2_gated/metrics.json b/DMS/dinov3_siglip2_gated/metrics.json new file mode 100644 index 0000000000000000000000000000000000000000..bc2217118cc1ac3eb750bc9ccbe5aa85b9bc7b53 --- /dev/null +++ b/DMS/dinov3_siglip2_gated/metrics.json @@ -0,0 +1,296 @@ +{ + "dataset": "DMS", + "checkpoint": "/best_model_SigLIP_DINOv3.pth", + "fusion_type": "gated", + "num_eval_samples": 186231, + "mIoU": 0.4630038334240617, + "mAcc": 0.638554054441271, + "per_class": { + "No label": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Animal skin": { + "accuracy": 0.6052631578947368, + "iou": 0.4107142857142857, + "support": 114 + }, + "Bone/teeth/horn": { + "accuracy": 0.7272727272727273, + "iou": 0.64, + "support": 44 + }, + "Brickwork": { + "accuracy": 0.7667560321715817, + "iou": 0.516245487364621, + "support": 1119 + }, + "Cardboard": { + "accuracy": 0.7526881720430108, + "iou": 0.48951048951048953, + "support": 1023 + }, + "Carpet/rug": { + "accuracy": 0.7797365754812563, + "iou": 0.49056603773584906, + "support": 4935 + }, + "Ceiling tile": { + "accuracy": 0.772635814889336, + "iou": 0.5140562248995983, + "support": 994 + }, + "Ceramic": { + "accuracy": 0.8396679772826562, + "iou": 0.5924784217016029, + "support": 2289 + }, + "Chalkboard/blackboard": { + "accuracy": 0.7534883720930232, + "iou": 0.5472972972972973, + "support": 215 + }, + "Clutter": { + "accuracy": 0.5094339622641509, + "iou": 0.40298507462686567, + "support": 53 + }, + "Concrete": { + "accuracy": 0.5126964933494559, + "iou": 0.2870683818551117, + "support": 1654 + }, + "Cork/corkboard": { + "accuracy": 0.3333333333333333, + "iou": 0.2125, + "support": 51 + }, + "Engineered stone": { + "accuracy": 0.23595505617977527, + "iou": 0.13725490196078433, + "support": 89 + }, + "Fabric/cloth": { + "accuracy": 0.7962766896064938, + "iou": 0.7181221404416153, + "support": 22668 + }, + "Fiberglass wool": { + "accuracy": 0.25, + "iou": 0.1724137931034483, + "support": 20 + }, + "Fire": { + "accuracy": 0.86, + "iou": 0.6142857142857143, + "support": 50 + }, + "Foliage": { + "accuracy": 0.9225982108129133, + "iou": 0.7788540469545231, + "support": 5142 + }, + "Food": { + "accuracy": 0.870391061452514, + "iou": 0.6411522633744856, + "support": 895 + }, + "Fur": { + "accuracy": 0.8190255220417634, + "iou": 0.6948818897637795, + "support": 431 + }, + "Gemstone/quartz": { + "accuracy": 0.66, + "iou": 0.2578125, + "support": 50 + }, + "Glass": { + "accuracy": 0.7757602663706992, + "iou": 0.6716119609501114, + "support": 22525 + }, + "Hair": { + "accuracy": 0.9737536656891496, + "iou": 0.9276435256320715, + "support": 6820 + }, + "I cannot tell": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Ice": { + "accuracy": 0.45454545454545453, + "iou": 0.3787878787878788, + "support": 55 + }, + "Leather": { + "accuracy": 0.7155576382380506, + "iou": 0.44094715564539416, + "support": 2134 + }, + "Liquid, non-water": { + "accuracy": 0.5, + "iou": 0.36, + "support": 36 + }, + "Metal": { + "accuracy": 0.8040444004835696, + "iou": 0.5635061233921281, + "support": 9099 + }, + "Mirror": { + "accuracy": 0.685069008782936, + "iou": 0.3976693372177713, + "support": 797 + }, + "Not on list": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Paint/plaster/enamel": { + "accuracy": 0.6256245875365325, + "iou": 0.5428516892536743, + "support": 31821 + }, + "Paper": { + "accuracy": 0.8281443481337343, + "iou": 0.6981582283200358, + "support": 11306 + }, + "Pearl": { + "accuracy": 0.0, + "iou": 0.0, + "support": 1 + }, + "Photograph/painting": { + "accuracy": 0.7112043139604554, + "iou": 0.3851395197923426, + "support": 1669 + }, + "Plastic, clear": { + "accuracy": 0.6785046728971963, + "iou": 0.4403558431055398, + "support": 1605 + }, + "Plastic, non-clear": { + "accuracy": 0.6440905874026893, + "iou": 0.5220558710491596, + "support": 14130 + }, + "Rubber/latex": { + "accuracy": 0.5712954333643989, + "iou": 0.3383002207505519, + "support": 1073 + }, + "Sand": { + "accuracy": 0.32954545454545453, + "iou": 0.25, + "support": 88 + }, + "Skin/lips": { + "accuracy": 0.975886284795668, + "iou": 0.9366574630501868, + "support": 11819 + }, + "Sky": { + "accuracy": 0.9308263695450325, + "iou": 0.6852358168147642, + "support": 2154 + }, + "Snow": { + "accuracy": 0.7064220183486238, + "iou": 0.5, + "support": 109 + }, + "Soap": { + "accuracy": 0.14285714285714285, + "iou": 0.14285714285714285, + "support": 7 + }, + "Soil/mud": { + "accuracy": 0.6636225266362252, + "iou": 0.41366223908918404, + "support": 657 + }, + "Sponge": { + "accuracy": 0.2777777777777778, + "iou": 0.19230769230769232, + "support": 18 + }, + "Stone, natural": { + "accuracy": 0.6101556101556102, + "iou": 0.4482551143200963, + "support": 1221 + }, + "Stone, polished": { + "accuracy": 0.41153342070773263, + "iou": 0.26364399664147775, + "support": 763 + }, + "Styrofoam": { + "accuracy": 0.16129032258064516, + "iou": 0.11627906976744186, + "support": 31 + }, + "Tile": { + "accuracy": 0.6489824317272569, + "iou": 0.4471476510067114, + "support": 5749 + }, + "Wallpaper": { + "accuracy": 0.59375, + "iou": 0.328125, + "support": 672 + }, + "Water": { + "accuracy": 0.6821793416572077, + "iou": 0.5207972270363952, + "support": 881 + }, + "Wax": { + "accuracy": 0.868421052631579, + "iou": 0.5789473684210527, + "support": 114 + }, + "Whiteboard": { + "accuracy": 0.6606606606606606, + "iou": 0.46218487394957986, + "support": 333 + }, + "Wicker": { + "accuracy": 0.7851239669421488, + "iou": 0.5771567436208992, + "support": 605 + }, + "Wood": { + "accuracy": 0.7963700463537247, + "iou": 0.6331689592525305, + "support": 15317 + }, + "Wood, tree": { + "accuracy": 0.7346938775510204, + "iou": 0.48758465011286684, + "support": 588 + }, + "Bad polygon": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Multiple materials": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Asphalt": { + "accuracy": 0.4898989898989899, + "iou": 0.3069620253164557, + "support": 198 + } + }, + "config": "config/config.toml" +} \ No newline at end of file diff --git a/DMS/dinov3_siglip2_gated/model.pth b/DMS/dinov3_siglip2_gated/model.pth new file mode 100644 index 0000000000000000000000000000000000000000..4e4da70ac9f487ce93748fae4d94dd2cb9d8c070 --- /dev/null +++ b/DMS/dinov3_siglip2_gated/model.pth @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5751d9a8428036b671c11a9fc440931ad0888d497feb7b2a0f93271b4f18b293 +size 7959608 diff --git a/DMS/dinov3_siglip2_gated/model.safetensors b/DMS/dinov3_siglip2_gated/model.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..b82097e6312614e07b927a6788539660ee410cda --- /dev/null +++ b/DMS/dinov3_siglip2_gated/model.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c71607a87521793b66f1fc13ba984fe2b6954774b0caad559ae94d72de33b12 +size 7952748 diff --git a/DMS/dinov3_siglip2_gated/split.json b/DMS/dinov3_siglip2_gated/split.json new file mode 100644 index 0000000000000000000000000000000000000000..ed2d710870e464f901ddcb2864317aed506fd3c4 --- /dev/null +++ b/DMS/dinov3_siglip2_gated/split.json @@ -0,0 +1,8271 @@ +{ + "val_groups": [ + "100023", + "100684", + "100767", + "100806", + "101108", + "101397", + "101542", + "101771", + "102242", + "102298", + "102300", + "102441", + "102723", + "102859", + "102949", + "103045", + "103061", + "103310", + "103351", + "103376", + "103416", + "103494", + "103686", + "103990", + "104894", + "104911", + "104917", + "105053", + "105099", + "105227", + "105355", + "105416", + "105696", + "106358", + "106446", + "106475", + "106484", + "106527", + "106788", + "106933", + "107102", + "107279", + "107305", + "107566", + "107782", + "107866", + "108158", + "108647", + "109239", + "109695", + "109726", + "109789", + "109812", + "109881", + "109999", + "110235", + "110322", + "110893", + "111049", + "111228", + "111280", + "111386", + "112424", + "112448", + "112457", + "112665", + "112857", + "113143", + "113524", + "113793", + "113890", + "114202", + "114224", + "114225", + "114241", + "114705", + "114774", + "115020", + "115498", + "115499", + "115760", + "116168", + "116191", + "116298", + "116449", + "116606", + "116733", + "117104", + "117266", + "117505", + "117707", + "118431", + "119280", + "119283", + "119321", + "119466", + "119521", + "119533", + "119783", + "119809", + "119974", + "120020", + "120125", + "120312", + "120531", + "120550", + "120678", + "120808", + "121071", + "121220", + "121316", + "121985", + "122087", + "122094", + "122153", + "122404", + "122550", + "122844", + "122964", + "123297", + "123381", + "123445", + "123516", + "123601", + "123649", + "123702", + "124102", + "124157", + "124466", + "124752", + "125018", + "125522", + "125549", + "125597", + "125898", + "125979", + "125983", + "126186", + "126431", + "126648", + "126667", + "126907", + "126987", + "127294", + "127355", + "127396", + "127586", + "127669", + "127714", + "127973", + "128106", + "128229", + "128646", + "128868", + "129361", + "129605", + "129853", + "129906", + "129979", + "130273", + "130677", + "130702", + "130741", + "130972", + "131016", + "131115", + "131213", + "131299", + "131561", + "131598", + "131633", + "131677", + "132112", + "132235", + "132287", + "132495", + "132522", + "132602", + "132652", + "132730", + "132957", + "132980", + "133073", + "133187", + "133299", + "133571", + "133998", + "134034", + "134536", + "134647", + "134744", + "134773", + "134830", + "134835", + "134865", + "135254", + "135261", + "135282", + "135490", + "135709", + "136113", + "136415", + "136496", + "136599", + "136677", + "136726", + "136786", + "136847", + "136869", + "136995", + "137430", + "137533", + "137955", + "138677", + "138726", + "139100", + "139408", + "139623", + "139650", + "139653", + "139721", + "139748", + "139977", + "140398", + "140499", + "140727", + "140777", + "141064", + "141182", + "141248", + "141855", + "142040", + "142358", + "142418", + "142569", + "142763", + "142787", + "143098", + "143149", + "143193", + "143481", + "143614", + "143630", + "143668", + "143688", + "143821", + "143884", + "144224", + "144530", + "144759", + "144762", + "144978", + "145373", + "145421", + "145538", + "147431", + "147459", + "147723", + "147858", + "147868", + "148109", + "148756", + "148810", + "148826", + "149253", + "149401", + "149468", + "150308", + "150382", + "150544", + "150565", + "150607", + "150935", + "151054", + "151243", + "151309", + "151551", + "151581", + "151726", + "151871", + "152161", + "152558", + "152760", + "152845", + "153056", + "153383", + "153617", + "153763", + "154293", + "154636", + "154681", + "154850", + "154873", + "154992", + "155063", + "155394", + "155444", + "155476", + "155920", + "156257", + "156261", + "156366", + "156674", + "157619", + "157688", + "157961", + "158086", + "158156", + "158202", + "158423", + "158990", + "159370", + "159801", + "159862", + "159919", + "159957", + "160451", + "160464", + "160982", + "161162", + "161331", + "161519", + "161576", + "161866", + "162020", + "162036", + "162092", + "162306", + "162549", + "162678", + "162798", + "163001", + "163039", + "163164", + "163254", + "163444", + "163517", + "163613", + "163825", + "163860", + "164018", + "164101", + "164713", + "164795", + "164989", + "165403", + "165521", + "165722", + "165988", + "166002", + "166374", + "166659", + "166714", + "166951", + "167223", + "167462", + "167493", + "167663", + "167917", + "168095", + "168127", + "168694", + "168971", + "169649", + "169674", + "169728", + "169817", + "169838", + "170025", + "170807", + "170875", + "170998", + "171186", + "171219", + "171460", + "171626", + "171726", + "172073", + "172138", + "172222", + "172488", + "172575", + "172763", + "172830", + "172960", + "173232", + "173248", + "173732", + "174439", + "174449", + "174521", + "174666", + "175176", + "175266", + "175356", + "175504", + "175844", + "175887", + "176175", + "176211", + "176255", + "176296", + "176375", + "176444", + "176998", + "177058", + "177108", + "177336", + "177473", + "177536", + "177680", + "177701", + "178063", + "178199", + "178270", + "178278", + "178421", + "178454", + "178973", + "179168", + "179264", + "179369", + "179600", + "179943", + "180839", + "181026", + "181157", + "181763", + "181990", + "182089", + "182267", + "182568", + "182583", + "182605", + "182793", + "182840", + "183009", + "183268", + "183662", + "183829", + "183932", + "184491", + "184676", + "184770", + "184802", + "184841", + "184892", + "185054", + "185101", + "185117", + "185165", + "185298", + "185316", + "185777", + "186172", + "186197", + "186424", + "186481", + "186585", + "186719", + "186902", + "187744", + "187814", + "187894", + "188066", + "188085", + "188778", + "189232", + "189269", + "189397", + "189485", + "189490", + "189519", + "189574", + "189751", + "190146", + "190176", + "190206", + "190249", + "190250", + "190332", + "190448", + "190477", + "190569", + "191141", + "191237", + "191400", + "191635", + "192431", + "192460", + "192557", + "192778", + "192831", + "192947", + "193267", + "193325", + "193358", + "193365", + "193374", + "193387", + "193490", + "193566", + "193574", + "193637", + "193681", + "193728", + "193737", + "193811", + "193844", + "193941", + "194054", + "194063", + "194154", + "194170", + "194195", + "194240", + "194254", + "194268", + "194280", + "194303", + "194351", + "194418", + "194489", + "194561", + "194594", + "194597", + "194642", + "194676", + "194688", + "194711", + "194735", + "194800", + "194803", + "194811", + "194814", + "194828", + "194992", + "195013", + "195016", + "195035", + "195196", + "195230", + "195238", + "195296", + "195299", + "195348", + "195405", + "195408", + "195421", + "195475", + "195509", + "195526", + "195535", + "195569", + "195618", + "195638", + "195663", + "195705", + "195709", + "195714", + "195736", + "195789", + "195791", + "195803", + "195804", + "195807", + "195829", + "195831", + "195900", + "195926", + "195938", + "195943", + "195951", + "196009", + "196030", + "196046", + "196126", + "196127", + "196165", + "196221", + "196266", + "196286", + "196293", + "196342", + "196348", + "196369", + "196391", + "196448", + "196476", + "196503", + "196528", + "196529", + "196580", + "196584", + "196604", + "196613", + "196640", + "196641", + "196692", + "196705", + "196730", + "196805", + "196815", + "196850", + "196861", + "196872", + "196888", + "196925", + "196927", + "196981", + "196988", + "196990", + "197034", + "197065", + "197078", + "197087", + "197108", + "197149", + "197206", + "197251", + "197258", + "197263", + "197269", + "197282", + "197290", + "197308", + "197323", + "197348", + "197351", + "197380", + "197432", + "197467", + "197468", + "197516", + "197616", + "197632", + "197687", + "197717", + "197730", + "197781", + "197788", + "197835", + "197884", + "197910", + "197982", + "198031", + "198034", + "198126", + "198132", + "198202", + "198298", + "198314", + "198324", + "198328", + "198348", + "198442", + "198491", + "198550", + "198552", + "198577", + "198585", + "198625", + "198681", + "198690", + "198695", + "198697", + "198706", + "198712", + "198721", + "198724", + "198730", + "198732", + "198767", + "198815", + "198825", + "198907", + "198950", + "198969", + "199023", + "199034", + "199207", + "199245", + "199256", + "199271", + "199309", + "199370", + "199386", + "199396", + "199410", + "199461", + "199477", + "199486", + "199693", + "199733", + "199768", + "199796", + "199832", + "199855", + "199896", + "199910", + "199923", + "199933", + "199947", + "200017", + "200043", + "200108", + "200127", + "200152", + "200170", + "200238", + "200272", + "200309", + "200315", + "200342", + "200413", + "200443", + "200461", + "200551", + "200611", + "200639", + "200647", + "200663", + "200669", + "200692", + "200720", + "200757", + "200765", + "200768", + "200775", + "200803", + "200808", + "200889", + "200896", + "200897", + "200922", + "200983", + "200986", + "201005", + "201020", + "201045", + "201048", + "201113", + "201154", + "201187", + "201234", + "201243", + "201249", + "201284", + "201292", + "201347", + "201388", + "201410", + "201454", + "201497", + "201554", + "201559", + "201591", + "201614", + "201691", + "201754", + "201771", + "201808", + "201852", + "201856", + "201909", + "201913", + "201920", + "201941", + "201977", + "202005", + "202034", + "202120", + "202201", + "202218", + "202236", + "202253", + "202276", + "202307", + "202321", + "202324", + "202377", + "202382", + "202454", + "202490", + "202499", + "202531", + "202546", + "202567", + "202582", + "202630", + "202645", + "202702", + "202771", + "202777", + "202814", + "202873", + "202876", + "202898", + "202942", + "203001", + "203025", + "203044", + "203076", + "203174", + "203226", + "203232", + "203237", + "203240", + "203339", + "203343", + "203372", + "203392", + "203401", + "203416", + "203463", + "203486", + "203515", + "203775", + "203842", + "203844", + "203996", + "204003", + "204018", + "204032", + "204040", + "204104", + "204108", + "204179", + "204182", + "204197", + "204211", + "204212", + "204223", + "204250", + "204271", + "204398", + "204441", + "204448", + "204488", + "204489", + "204497", + "204499", + "204590", + "204628", + "204667", + "204710", + "204790", + "204797", + "204847", + "204850", + "204895", + "204999", + "205044", + "205054", + "205061", + "205093", + "205162", + "205171", + "205189", + "205193", + "205224", + "205245", + "205256", + "205317", + "205353", + "205483", + "205626", + "205646", + "205656", + "205701", + "205732", + "205754", + "205800", + "205846", + "205858", + "205859", + "205901", + "205942", + "205954", + "206023", + "206042", + "206076", + "206132", + "206233", + "206237", + "206249", + "206259", + "206272", + "206331", + "206376", + "206506", + "206545", + "206566", + "206568", + "206577", + "206592", + "206625", + "206773", + "206848", + "206919", + "206930", + "206938", + "206960", + "206963", + "206966", + "207000", + "207006", + "207014", + "207058", + "207081", + "207082", + "207129", + "207140", + "207167", + "207266", + "207283", + "207329", + "207347", + "207351", + "207481", + "207504", + "207554", + "207575", + "207701", + "207735", + "207754", + "207756", + "207757", + "207765", + "207768", + "207789", + "207814", + "207885", + "207888", + "207923", + "207933", + "207938", + "207955", + "207971", + "208023", + "208152", + "208159", + "208160", + "208171", + "208187", + "208201", + "208429", + "208441", + "208468", + "208497", + "208513", + "208532", + "208534", + "208555", + "208578", + "208592", + "208610", + "208625", + "208663", + "208680", + "208690", + "208694", + "208702", + "208723", + "208848", + "208856", + "208864", + "208885", + "208900", + "208924", + "208967", + "208968", + "209081", + "209085", + "209114", + "209174", + "209214", + "209221", + "209313", + "209367", + "209388", + "209396", + "209406", + "209415", + "209430", + "209438", + "209615", + "209653", + "209701", + "209709", + "209726", + "209737", + "209746", + "209753", + "209760", + "209765", + "209792", + "209796", + "209812", + "209823", + "209860", + "209861", + "209895", + "209901", + "209905", + "209932", + "209996", + "210064", + "210160", + "210197", + "210227", + "210229", + "210235", + "210318", + "210331", + "210341", + "210344", + "210353", + "210398", + "210399", + "210465", + "210466", + "210469", + "210473", + "210525", + "210540", + "210567", + "210581", + "210601", + "210668", + "210687", + "210762", + "210796", + "210818", + "210904", + "210930", + "210933", + "210967", + "210996", + "211023", + "211044", + "211069", + "211096", + "211101", + "211108", + "211155", + "211212", + "211268", + "211329", + "211356", + "211531", + "211537", + "211550", + "211595", + "211596", + "211629", + "211664", + "211684", + "211715", + "211752", + "211785", + "211854", + "211859", + "211880", + "211929", + "211937", + "211973", + "211974", + "212055", + "212093", + "212149", + "212153", + "212251", + "212302", + "212366", + "212523", + "212528", + "212559", + "212580", + "212628", + "212696", + "212740", + "212915", + "212956", + "212969", + "212975", + "213064", + "213065", + "213109", + "213113", + "213213", + "213254", + "213365", + "213375", + "213380", + "213385", + "213394", + "213400", + "213503", + "213514", + "213524", + "213534", + "213551", + "213601", + "213636", + "213651", + "213664", + "213737", + "213778", + "213792", + "213816", + "213854", + "213855", + "213871", + "213880", + "213884", + "213996", + "214128", + "214181", + "214188", + "214193", + "214212", + "214272", + "214310", + "214329", + "214331", + "214347", + "214420", + "214434", + "214443", + "214469", + "214481", + "214515", + "214562", + "214633", + "214669", + "214696", + "214701", + "214717", + "214745", + "214779", + "214807", + "214830", + "214921", + "214927", + "214931", + "214990", + "215005", + "215024", + "215076", + "215099", + "215116", + "215172", + "215175", + "215181", + "215196", + "215215", + "215253", + "215308", + "215323", + "215330", + "215373", + "215435", + "215440", + "215479", + "215491", + "215533", + "215583", + "215584", + "215687", + "215693", + "215706", + "215718", + "215778", + "215807", + "215838", + "215859", + "215877", + "215924", + "215935", + "215945", + "215951", + "216020", + "216026", + "216033", + "216040", + "216069", + "216081", + "216174", + "216193", + "216196", + "216207", + "216328", + "216343", + "216430", + "216444", + "216445", + "216497", + "216500", + "216511", + "216513", + "216535", + "216765", + "216967", + "217059", + "217065", + "217076", + "217147", + "217151", + "217155", + "217181", + "217326", + "217363", + "217381", + "217412", + "217475", + "217476", + "217534", + "217565", + "217568", + "217645", + "217660", + "217675", + "217740", + "217779", + "217808", + "217830", + "217858", + "217878", + "217884", + "217908", + "217914", + "217956", + "218062", + "218063", + "218134", + "218137", + "218142", + "218173", + "218178", + "218198", + "218240", + "218281", + "218294", + "218350", + "218373", + "218385", + "218400", + "218425", + "218435", + "218475", + "218502", + "218582", + "218675", + "218687", + "218717", + "218722", + "218781", + "218833", + "218841", + "218944", + "218981", + "218985", + "219032", + "219037", + "219062", + "219065", + "219085", + "219150", + "219165", + "219246", + "219263", + "219295", + "219324", + "219332", + "219381", + "219390", + "219425", + "219454", + "219458", + "219459", + "219475", + "219485", + "219561", + "219619", + "219626", + "219641", + "219665", + "219693", + "219696", + "219740", + "219754", + "219763", + "219799", + "219807", + "219880", + "219958", + "220010", + "220046", + "220081", + "220118", + "220130", + "220140", + "220198", + "220227", + "220318", + "220326", + "220349", + "220391", + "220407", + "220408", + "220419", + "220453", + "220458", + "220471", + "220473", + "220474", + "220477", + "220485", + "220518", + "220539", + "220551", + "220553", + "220572", + "220647", + "220649", + "220653", + "220669", + "220781", + "220787", + "220809", + "220880", + "220898", + "220946", + "220968", + "220984", + "220992", + "221029", + "221030", + "221074", + "221112", + "221125", + "221176", + "221184", + "221221", + "221248", + "221277", + "221305", + "221314", + "221382", + "221400", + "221412", + "221448", + "221454", + "221470", + "221485", + "221489", + "221495", + "221505", + "221562", + "221583", + "221605", + "221606", + "221721", + "221733", + "221763", + "221773", + "221792", + "221799", + "221923", + "222027", + "222127", + "222131", + "222143", + "222191", + "222222", + "222268", + "222269", + "222332", + "222447", + "222449", + "222475", + "222498", + "222520", + "222532", + "222535", + "222560", + "222681", + "222719", + "222759", + "222817", + "222819", + "222828", + "222855", + "222966", + "222979", + "223064", + "223077", + "223106", + "223163", + "223178", + "223189", + "223194", + "223218", + "223289", + "223294", + "223311", + "223318", + "223321", + "223397", + "223401", + "223416", + "223418", + "223462", + "223476", + "223510", + "223543", + "223552", + "223662", + "223673", + "223691", + "223723", + "223838", + "223885", + "223895", + "223918", + "223928", + "223930", + "223933", + "223966", + "224017", + "224022", + "224116", + "224119", + "224172", + "224259", + "224302", + "224328", + "224379", + "224390", + "224409", + "224440", + "224443", + "224457", + "224483", + "224485", + "224496", + "224499", + "224525", + "224537", + "224538", + "224543", + "224549", + "224566", + "224596", + "224614", + "224701", + "224714", + "224754", + "224776", + "224781", + "224830", + "224891", + "22501", + "225044", + "22506", + "225063", + "22507", + "225082", + "225138", + "225162", + "225192", + "225232", + "22524", + "225253", + "225266", + "22527", + "225274", + "22530", + "225303", + "225311", + "225319", + "225327", + "225346", + "22535", + "22537", + "22541", + "225413", + "225428", + "22543", + "225442", + "225473", + "225497", + "225550", + "22556", + "225576", + "22558", + "225618", + "22564", + "22565", + "225688", + "225706", + "22572", + "22574", + "22575", + "225762", + "225766", + "22578", + "22580", + "225846", + "22585", + "225871", + "225907", + "22594", + "225968", + "225989", + "225990", + "22600", + "226008", + "22601", + "22603", + "226059", + "22606", + "226096", + "22611", + "226117", + "226202", + "226230", + "226302", + "22633", + "226336", + "22634", + "226398", + "22641", + "22642", + "226429", + "226448", + "226481", + "226488", + "226491", + "226511", + "226533", + "226566", + "22658", + "226583", + "226586", + "226598", + "226613", + "226648", + "22665", + "226668", + "226702", + "226704", + "226709", + "226767", + "226778", + "226785", + "226849", + "22685", + "22686", + "226883", + "226884", + "226892", + "226915", + "226931", + "226940", + "226958", + "22698", + "226984", + "226993", + "227008", + "22704", + "227086", + "227160", + "227162", + "227163", + "227169", + "227173", + "227182", + "227193", + "22720", + "22721", + "227211", + "227223", + "22723", + "227231", + "227245", + "227275", + "227292", + "227297", + "227314", + "227344", + "227347", + "22740", + "227410", + "227472", + "22748", + "227481", + "22750", + "22753", + "227544", + "227549", + "22756", + "22758", + "227599", + "227616", + "22762", + "227621", + "227627", + "227667", + "227670", + "227681", + "22769", + "227691", + "227697", + "22771", + "227726", + "227753", + "227779", + "22779", + "227799", + "227837", + "227848", + "227914", + "227927", + "22795", + "227967", + "227969", + "227980", + "227986", + "227991", + "228011", + "228025", + "22803", + "228035", + "228043", + "22809", + "22810", + "22814", + "22815", + "228158", + "22816", + "228166", + "228169", + "228181", + "22819", + "22821", + "228212", + "22823", + "228238", + "228253", + "22827", + "228280", + "228285", + "228305", + "228351", + "22836", + "228378", + "228392", + "22842", + "228458", + "228482", + "228496", + "22854", + "228592", + "228614", + "228616", + "22868", + "228691", + "22871", + "22873", + "228771", + "228800", + "22884", + "22885", + "22891", + "228938", + "228939", + "22895", + "22896", + "228961", + "228988", + "228999", + "229024", + "229032", + "22908", + "229083", + "22918", + "229189", + "22919", + "229197", + "22920", + "229209", + "22923", + "229232", + "229235", + "229321", + "229328", + "229364", + "229378", + "229398", + "22940", + "22944", + "229440", + "229456", + "22947", + "229524", + "22953", + "22954", + "22955", + "22956", + "22957", + "22958", + "229603", + "22961", + "229613", + "229656", + "22967", + "229705", + "22971", + "229809", + "229814", + "229859", + "22986", + "229902", + "22991", + "229918", + "22993", + "229943", + "22998", + "229984", + "229994", + "23000", + "230003", + "230009", + "23001", + "230024", + "230034", + "23009", + "23010", + "230109", + "230114", + "230115", + "230118", + "23014", + "230145", + "230147", + "23016", + "230243", + "230257", + "230258", + "230276", + "230281", + "23029", + "23030", + "230305", + "230360", + "23039", + "230394", + "230403", + "230406", + "230486", + "23049", + "23051", + "230519", + "23054", + "230569", + "23058", + "23059", + "230604", + "230620", + "230644", + "23066", + "23071", + "230711", + "230729", + "230754", + "230765", + "230776", + "23080", + "230803", + "23082", + "230822", + "230825", + "23086", + "230913", + "230915", + "230917", + "23092", + "230927", + "230965", + "23098", + "23100", + "231015", + "231038", + "231065", + "23107", + "23108", + "231098", + "231100", + "231171", + "23120", + "231224", + "231236", + "23126", + "231277", + "23130", + "231312", + "231340", + "231382", + "231389", + "23145", + "23153", + "231589", + "23162", + "231633", + "23166", + "23167", + "231710", + "231722", + "23173", + "231732", + "23175", + "23179", + "231838", + "231857", + "231883", + "231902", + "231904", + "23192", + "231935", + "23200", + "23202", + "23204", + "232073", + "232080", + "232095", + "23215", + "232181", + "232190", + "23221", + "232213", + "232235", + "232263", + "232338", + "23234", + "23239", + "232407", + "232434", + "232445", + "23246", + "232480", + "232488", + "232523", + "23256", + "23259", + "232594", + "23260", + "23263", + "232630", + "23264", + "23266", + "232693", + "232698", + "232700", + "232702", + "23272", + "232738", + "232764", + "23278", + "232787", + "23281", + "23284", + "23285", + "23287", + "232875", + "232878", + "23288", + "232885", + "23294", + "232948", + "232970", + "232972", + "232976", + "232998", + "233008", + "233009", + "233015", + "233034", + "233037", + "23308", + "23309", + "23310", + "233119", + "23312", + "233141", + "233208", + "23321", + "23322", + "23324", + "233246", + "233267", + "233282", + "233299", + "23332", + "233326", + "233330", + "23340", + "23353", + "23357", + "23359", + "23372", + "23374", + "23375", + "23383", + "23388", + "23395", + "23402", + "23404", + "23406", + "23409", + "23413", + "23420", + "23434", + "23441", + "23443", + "23453", + "23454", + "23462", + "23463", + "23464", + "23467", + "23475", + "23480", + "23485", + "23489", + "23490", + "23502", + "23504", + "23509", + "23510", + "23514", + "23516", + "23541", + "23542", + "23548", + "23549", + "23551", + "23555", + "23559", + "23578", + "23579", + "23583", + "23585", + "23589", + "23591", + "23612", + "23616", + "23621", + "23627", + "23637", + "23652", + "23654", + "23656", + "23657", + "23668", + "23681", + "23686", + "23692", + "23696", + "23697", + "23701", + "23702", + "23709", + "23739", + "23744", + "23753", + "23756", + "23764", + "23766", + "23774", + "23776", + "23784", + "23785", + "23794", + "23796", + "23799", + "23803", + "23823", + "23824", + "23825", + "23827", + "23835", + "23846", + "23855", + "23859", + "23868", + "23871", + "23876", + "23890", + "23891", + "23893", + "23895", + "23896", + "23897", + "23901", + "23906", + "23921", + "23928", + "23933", + "23945", + "23950", + "23953", + "23955", + "23960", + "23967", + "23973", + "23980", + "23981", + "23984", + "23988", + "23993", + "23995", + "23999", + "24005", + "24019", + "24022", + "24024", + "24029", + "24032", + "24033", + "24036", + "24037", + "24039", + "24043", + "24047", + "24056", + "24059", + "24060", + "24061", + "24072", + "24079", + "24085", + "24090", + "24101", + "24106", + "24112", + "24113", + "24118", + "24119", + "24123", + "24130", + "24131", + "24134", + "24136", + "24138", + "24142", + "24164", + "24168", + "24171", + "24176", + "24181", + "24184", + "24192", + "24197", + "24198", + "24200", + "24219", + "24223", + "24227", + "24230", + "24241", + "24246", + "24250", + "24251", + "24255", + "24263", + "24264", + "24269", + "24273", + "24275", + "24278", + "24284", + "24297", + "24303", + "24305", + "24309", + "24315", + "24323", + "24326", + "24333", + "24337", + "24338", + "24339", + "24341", + "24344", + "24353", + "24361", + "24373", + "24383", + "24390", + "24393", + "24396", + "24400", + "24404", + "24405", + "24410", + "24412", + "24433", + "24436", + "24438", + "24441", + "24446", + "24452", + "24453", + "24464", + "24466", + "24469", + "24487", + "24493", + "24500", + "24508", + "24513", + "24516", + "24517", + "24524", + "24527", + "24531", + "24541", + "24549", + "24557", + "24567", + "24578", + "24579", + "24580", + "24585", + "24588", + "24590", + "24599", + "24600", + "24616", + "24627", + "24630", + "24632", + "24633", + "24637", + "24639", + "24645", + "24649", + "24651", + "24655", + "24657", + "24668", + "24670", + "24676", + "24684", + "24688", + "24689", + "24692", + "24702", + "24704", + "24711", + "24716", + "24717", + "24733", + "24736", + "24739", + "24743", + "24769", + "24774", + "24777", + "24779", + "24782", + "24789", + "24798", + "24799", + "24801", + "24808", + "24822", + "24824", + "24832", + "24836", + "24849", + "24855", + "24863", + "24872", + "24879", + "24881", + "24884", + "24885", + "24886", + "24887", + "24888", + "24894", + "24895", + "24898", + "24902", + "24908", + "24917", + "24925", + "24928", + "24932", + "24940", + "24945", + "24956", + "24959", + "24962", + "24963", + "24968", + "24969", + "24983", + "24985", + "24986", + "24991", + "24995", + "24999", + "25001", + "25007", + "25009", + "25011", + "25012", + "25015", + "25018", + "25020", + "25021", + "25025", + "25031", + "25045", + "25049", + "25054", + "25058", + "25071", + "25081", + "25082", + "25087", + "25091", + "25105", + "25108", + "25112", + "25113", + "25117", + "25119", + "25124", + "25125", + "25129", + "25143", + "25145", + "25160", + "25168", + "25176", + "25186", + "25187", + "25193", + "25194", + "25196", + "25199", + "25207", + "25211", + "25215", + "25217", + "25218", + "25227", + "25245", + "25254", + "25270", + "25284", + "25288", + "25296", + "25299", + "25305", + "25333", + "25337", + "25338", + "25347", + "25349", + "25350", + "25353", + "25355", + "25358", + "25370", + "25393", + "25403", + "25412", + "25413", + "25414", + "25417", + "25422", + "25423", + "25425", + "25428", + "25434", + "25437", + "25449", + "25450", + "25451", + "25452", + "25471", + "25473", + "25474", + "25480", + "25485", + "25486", + "25495", + "25508", + "25509", + "25512", + "25514", + "25518", + "25520", + "25523", + "25524", + "25527", + "25530", + "25531", + "25539", + "25542", + "25544", + "25545", + "25554", + "25561", + "25565", + "25566", + "25577", + "25579", + "25582", + "25587", + "25597", + "25598", + "25601", + "25611", + "25619", + "25622", + "25632", + "25635", + "25637", + "25639", + "25643", + "25647", + "25654", + "25661", + "25665", + "25672", + "25674", + "25677", + "25679", + "25682", + "25686", + "25688", + "25693", + "25696", + "25699", + "25700", + "25704", + "25706", + "25711", + "25712", + "25718", + "25722", + "25726", + "25728", + "25734", + "25740", + "25743", + "25745", + "25747", + "25750", + "25780", + "25785", + "25787", + "25798", + "25799", + "25816", + "25819", + "25823", + "25825", + "25830", + "25834", + "25841", + "25848", + "25853", + "25854", + "25861", + "25863", + "25866", + "25868", + "25869", + "25874", + "25879", + "25899", + "25904", + "25905", + "25913", + "25941", + "25944", + "25945", + "25948", + "25950", + "25953", + "25959", + "25971", + "25973", + "25974", + "25980", + "25983", + "25990", + "25992", + "25994", + "25998", + "25999", + "26004", + "26015", + "26016", + "26017", + "26020", + "26021", + "26024", + "26032", + "26033", + "26039", + "26043", + "26047", + "26053", + "26062", + "26070", + "26074", + "26084", + "26089", + "26093", + "26094", + "26107", + "26108", + "26120", + "26136", + "26144", + "26155", + "26157", + "26159", + "26162", + "26168", + "26170", + "26173", + "26180", + "26184", + "26190", + "26191", + "26197", + "26203", + "26216", + "26220", + "26233", + "26235", + "26243", + "26244", + "26245", + "26253", + "26256", + "26277", + "26281", + "26284", + "26286", + "26289", + "26291", + "26299", + "26316", + "26325", + "26327", + "26347", + "26348", + "26351", + "26352", + "26354", + "26358", + "26359", + "26360", + "26365", + "26371", + "26375", + "26388", + "26399", + "26410", + "26412", + "26414", + "26426", + "26437", + "26438", + "26439", + "26452", + "26477", + "26481", + "26485", + "26486", + "26489", + "26517", + "26526", + "26530", + "26539", + "26541", + "26546", + "26558", + "26560", + "26571", + "26576", + "26577", + "26578", + "26579", + "26581", + "26603", + "26615", + "26620", + "26625", + "26631", + "26643", + "26644", + "26645", + "26658", + "26661", + "26666", + "26670", + "26671", + "26683", + "26685", + "26686", + "26692", + "26696", + "26699", + "26700", + "26707", + "26711", + "26718", + "26735", + "26736", + "26745", + "26748", + "26753", + "26760", + "26762", + "26764", + "26766", + "26768", + "26773", + "26780", + "26785", + "26790", + "26800", + "26808", + "26811", + "26817", + "26818", + "26819", + "26821", + "26833", + "26858", + "26861", + "26872", + "26874", + "26875", + "26878", + "26884", + "26892", + "26895", + "26897", + "26912", + "26918", + "26926", + "26929", + "26937", + "26944", + "26954", + "26958", + "26964", + "26966", + "26968", + "26969", + "26976", + "26980", + "26981", + "26991", + "26992", + "27024", + "27027", + "27028", + "27031", + "27033", + "27042", + "27043", + "27046", + "27050", + "27065", + "27067", + "27078", + "27084", + "27093", + "27121", + "27130", + "27138", + "27144", + "27145", + "27163", + "27172", + "27176", + "27192", + "27193", + "27197", + "27198", + "27200", + "27204", + "27206", + "27223", + "27224", + "27234", + "27236", + "27239", + "27247", + "27249", + "27254", + "27261", + "27268", + "27270", + "27276", + "27277", + "27282", + "27283", + "27284", + "27295", + "27296", + "27301", + "27305", + "27307", + "27313", + "27316", + "27321", + "27323", + "27326", + "27332", + "27346", + "27355", + "27358", + "27361", + "27365", + "27368", + "27369", + "27370", + "27374", + "27382", + "27387", + "27391", + "27395", + "27407", + "27409", + "27421", + "27430", + "27432", + "27436", + "27437", + "27443", + "27444", + "27450", + "27452", + "27458", + "27467", + "27468", + "27473", + "27474", + "27485", + "27487", + "27492", + "27496", + "27497", + "27499", + "27502", + "27508", + "27509", + "27512", + "27519", + "27525", + "27527", + "27529", + "27543", + "27549", + "27553", + "27559", + "27560", + "27570", + "27576", + "27577", + "27579", + "27581", + "27584", + "27592", + "27594", + "27601", + "27604", + "27607", + "27608", + "27611", + "27612", + "27619", + "27624", + "27626", + "27642", + "27648", + "27658", + "27660", + "27671", + "27682", + "27687", + "27688", + "27703", + "27705", + "27714", + "27716", + "27721", + "27722", + "27732", + "27734", + "27740", + "27743", + "27747", + "27749", + "27750", + "27757", + "27760", + "27766", + "27773", + "27780", + "27783", + "27789", + "27798", + "27800", + "27815", + "27817", + "27832", + "27833", + "27836", + "27850", + "27852", + "27858", + "27869", + "27876", + "27877", + "27879", + "27880", + "27881", + "27883", + "27888", + "27893", + "27920", + "27931", + "27935", + "27936", + "27938", + "27940", + "27941", + "27943", + "27947", + "27949", + "27956", + "27962", + "27970", + "27986", + "28006", + "28007", + "28008", + "28013", + "28026", + "28027", + "28028", + "28031", + "28038", + "28039", + "28045", + "28047", + "28050", + "28052", + "28061", + "28069", + "28070", + "28072", + "28073", + "28081", + "28082", + "28090", + "28100", + "28106", + "28109", + "28110", + "28112", + "28116", + "28119", + "28121", + "28122", + "28134", + "28141", + "28150", + "28153", + "28155", + "28158", + "28159", + "28160", + "28162", + "28163", + "28169", + "28177", + "28181", + "28182", + "28183", + "28190", + "28191", + "28197", + "28205", + "28207", + "28208", + "28209", + "28212", + "28218", + "28223", + "28226", + "28228", + "28229", + "28232", + "28241", + "28242", + "28244", + "28249", + "28252", + "28261", + "28262", + "28263", + "28272", + "28273", + "28278", + "28285", + "28294", + "28296", + "28299", + "28311", + "28319", + "28320", + "28323", + "28332", + "28338", + "28346", + "28350", + "28360", + "28372", + "28376", + "28378", + "28382", + "28383", + "28390", + "28392", + "28395", + "28396", + "28411", + "28416", + "28423", + "28441", + "28452", + "28453", + "28463", + "28467", + "28471", + "28473", + "28476", + "28479", + "28483", + "28489", + "28498", + "28499", + "28501", + "28503", + "28504", + "28512", + "28515", + "28517", + "28519", + "28526", + "28538", + "28540", + "28541", + "28542", + "28546", + "28548", + "28553", + "28557", + "28558", + "28560", + "28583", + "28584", + "28591", + "28595", + "28598", + "28600", + "28601", + "28607", + "28609", + "28611", + "28612", + "28616", + "28621", + "28622", + "28631", + "28645", + "28647", + "28660", + "28661", + "28662", + "28665", + "28675", + "28682", + "28685", + "28691", + "28697", + "28699", + "28700", + "28708", + "28719", + "28724", + "28725", + "28727", + "28728", + "28740", + "28741", + "28744", + "28747", + "28749", + "28760", + "28763", + "28764", + "28777", + "28778", + "28782", + "28788", + "28793", + "28794", + "28797", + "28798", + "28803", + "28827", + "28831", + "28833", + "28842", + "28844", + "28846", + "28847", + "28863", + "28867", + "28885", + "28888", + "28895", + "28898", + "28902", + "28912", + "28914", + "28919", + "28923", + "28925", + "28927", + "28939", + "28940", + "28945", + "28949", + "28951", + "28954", + "28956", + "28958", + "28960", + "28972", + "28973", + "28981", + "28982", + "28992", + "29010", + "29022", + "29034", + "29036", + "29040", + "29059", + "29060", + "29072", + "29074", + "29075", + "29077", + "29086", + "29094", + "29095", + "29104", + "29106", + "29107", + "29111", + "29121", + "29124", + "29130", + "29132", + "29147", + "29184", + "29190", + "29215", + "29222", + "29223", + "29242", + "29249", + "29258", + "29260", + "29263", + "29266", + "29281", + "29285", + "29291", + "29304", + "29309", + "29310", + "29315", + "29318", + "29321", + "29326", + "29340", + "29345", + "29347", + "29360", + "29361", + "29366", + "29371", + "29377", + "29394", + "29399", + "29404", + "29406", + "29411", + "29443", + "29447", + "29453", + "29462", + "29468", + "29479", + "29495", + "29499", + "29505", + "29507", + "29509", + "29515", + "29519", + "29524", + "29530", + "29544", + "29546", + "29547", + "29555", + "29563", + "29566", + "29573", + "29575", + "29576", + "29578", + "29590", + "29591", + "29607", + "29634", + "29635", + "29644", + "29645", + "29650", + "29652", + "29658", + "29662", + "29663", + "29676", + "29679", + "29680", + "29684", + "29692", + "29696", + "29699", + "29704", + "29705", + "29707", + "29719", + "29723", + "29725", + "29726", + "29729", + "29735", + "29742", + "29750", + "29762", + "29769", + "29772", + "29774", + "29780", + "29781", + "29792", + "29801", + "29806", + "29811", + "29816", + "29817", + "29821", + "29832", + "29834", + "29836", + "29838", + "29841", + "29843", + "29846", + "29847", + "29853", + "29858", + "29861", + "29868", + "29870", + "29871", + "29883", + "29894", + "29896", + "29898", + "29905", + "29908", + "29911", + "29914", + "29918", + "29927", + "29931", + "29933", + "29941", + "29949", + "29955", + "29961", + "29964", + "29966", + "29967", + "29976", + "29980", + "29983", + "29984", + "29994", + "29997", + "30002", + "30010", + "30021", + "30027", + "30028", + "30029", + "30034", + "30038", + "30047", + "30048", + "30049", + "30050", + "30051", + "30061", + "30064", + "30071", + "30074", + "30075", + "30077", + "30082", + "30087", + "30093", + "30100", + "30101", + "30102", + "30109", + "30117", + "30124", + "30131", + "30134", + "30143", + "30145", + "30154", + "30155", + "30173", + "30177", + "30197", + "30201", + "30203", + "30210", + "30214", + "30216", + "30221", + "30223", + "30231", + "30239", + "30240", + "30242", + "30245", + "30247", + "30254", + "30260", + "30271", + "30272", + "30284", + "30289", + "30296", + "30307", + "30310", + "30312", + "30313", + "30319", + "30328", + "30331", + "30340", + "30345", + "30346", + "30348", + "30356", + "30360", + "30365", + "30375", + "30382", + "30402", + "30403", + "30405", + "30410", + "30414", + "30436", + "30440", + "30441", + "30444", + "30454", + "30457", + "30473", + "30474", + "30476", + "30485", + "30496", + "30501", + "30506", + "30507", + "30513", + "30521", + "30522", + "30524", + "30529", + "30531", + "30534", + "30541", + "30548", + "30551", + "30555", + "30556", + "30560", + "30563", + "30565", + "30567", + "30586", + "30588", + "30590", + "30599", + "30604", + "30614", + "30650", + "30653", + "30656", + "30663", + "30666", + "30667", + "30669", + "30678", + "30689", + "30700", + "30704", + "30711", + "30727", + "30728", + "30729", + "30731", + "30745", + "30746", + "30748", + "30750", + "30759", + "30760", + "30766", + "30771", + "30781", + "30782", + "30794", + "30797", + "30805", + "30813", + "30818", + "30821", + "30848", + "30849", + "30854", + "30868", + "30869", + "30873", + "30874", + "30879", + "30893", + "30896", + "30902", + "30908", + "30911", + "30913", + "30917", + "30918", + "30931", + "30943", + "30949", + "30954", + "30959", + "30964", + "30974", + "30977", + "30981", + "30985", + "30996", + "30997", + "31003", + "31020", + "31025", + "31032", + "31061", + "31064", + "31065", + "31076", + "31082", + "31091", + "31104", + "31105", + "31115", + "31121", + "31123", + "31132", + "31134", + "31138", + "31145", + "31149", + "31154", + "31156", + "31166", + "31167", + "31168", + "31169", + "31170", + "31177", + "31182", + "31183", + "31188", + "31196", + "31198", + "31199", + "31210", + "31227", + "31230", + "31234", + "31244", + "31245", + "31251", + "31252", + "31258", + "31267", + "31275", + "31280", + "31281", + "31282", + "31292", + "31306", + "31307", + "31308", + "31311", + "31312", + "31313", + "31320", + "31330", + "31350", + "31358", + "31359", + "31363", + "31365", + "31381", + "31393", + "31395", + "31396", + "31405", + "31408", + "31414", + "31416", + "31425", + "31426", + "31429", + "31434", + "31437", + "31440", + "31443", + "31448", + "31460", + "31463", + "31469", + "31478", + "31482", + "31485", + "31490", + "31503", + "31509", + "31521", + "31527", + "31538", + "31541", + "31543", + "31546", + "31552", + "31554", + "31563", + "31564", + "31573", + "31579", + "31589", + "31601", + "31602", + "31614", + "31619", + "31623", + "31636", + "31648", + "31654", + "31659", + "31678", + "31688", + "31689", + "31693", + "31711", + "31717", + "31721", + "31725", + "31727", + "31729", + "31731", + "31733", + "31737", + "31740", + "31742", + "31745", + "31748", + "31764", + "31769", + "31772", + "31777", + "31779", + "31785", + "31796", + "31801", + "31810", + "31813", + "31818", + "31819", + "31821", + "31823", + "31824", + "31825", + "31826", + "31828", + "31830", + "31837", + "31845", + "31847", + "31850", + "31851", + "31855", + "31856", + "31857", + "31866", + "31883", + "31889", + "31892", + "31903", + "31907", + "31909", + "31915", + "31919", + "31922", + "31924", + "31927", + "31928", + "31944", + "31945", + "31958", + "31960", + "31963", + "31964", + "31966", + "31971", + "31973", + "31980", + "31986", + "31991", + "31992", + "31994", + "31997", + "32011", + "32016", + "32020", + "32027", + "32029", + "32031", + "32034", + "32039", + "32057", + "32065", + "32073", + "32074", + "32080", + "32082", + "32083", + "32089", + "32091", + "32097", + "32099", + "32100", + "32101", + "32107", + "32109", + "32115", + "32128", + "32141", + "32148", + "32156", + "32177", + "32178", + "32184", + "32187", + "32194", + "32195", + "32196", + "32197", + "32201", + "32212", + "32213", + "32225", + "32231", + "32237", + "32241", + "32247", + "32249", + "32250", + "32265", + "32268", + "32270", + "32276", + "32277", + "32280", + "32281", + "32285", + "32287", + "32288", + "32293", + "32296", + "32305", + "32307", + "32314", + "32326", + "32331", + "32332", + "32342", + "32347", + "32350", + "32362", + "32368", + "32370", + "32376", + "32377", + "32382", + "32385", + "32387", + "32395", + "32412", + "32415", + "32421", + "32430", + "32431", + "32434", + "32435", + "32437", + "32439", + "32452", + "32460", + "32465", + "32467", + "32471", + "32473", + "32474", + "32485", + "32492", + "32495", + "32499", + "32509", + "32515", + "32519", + "32525", + "32527", + "32538", + "32545", + "32551", + "32564", + "32567", + "32568", + "32578", + "32590", + "32601", + "32603", + "32604", + "32607", + "32609", + "32610", + "32613", + "32615", + "32630", + "32631", + "32634", + "32645", + "32646", + "32659", + "32661", + "32665", + "32673", + "32675", + "32678", + "32682", + "32701", + "32702", + "32704", + "32705", + "32709", + "32717", + "32732", + "32742", + "32756", + "32759", + "32763", + "32771", + "32773", + "32774", + "32777", + "32779", + "32781", + "32783", + "32787", + "32791", + "32796", + "32805", + "32808", + "32815", + "32821", + "32826", + "32833", + "32836", + "32847", + "32852", + "32854", + "32858", + "32867", + "32872", + "32884", + "32886", + "32903", + "32907", + "32914", + "32921", + "32922", + "32934", + "32936", + "32941", + "32945", + "32948", + "32963", + "32964", + "32968", + "32976", + "32980", + "32983", + "32984", + "33007", + "33010", + "33025", + "33027", + "33032", + "33035", + "33037", + "33049", + "33050", + "33053", + "33054", + "33057", + "33066", + "33067", + "33073", + "33077", + "33079", + "33085", + "33086", + "33087", + "33091", + "33095", + "33097", + "33104", + "33112", + "33114", + "33121", + "33122", + "33123", + "33133", + "33138", + "33139", + "33140", + "33141", + "33143", + "33158", + "33161", + "33174", + "33175", + "33176", + "33184", + "33189", + "33191", + "33198", + "33201", + "33207", + "33213", + "33217", + "33218", + "33219", + "33227", + "33231", + "33234", + "33237", + "33238", + "33239", + "33252", + "33256", + "33257", + "33273", + "33279", + "33283", + "33286", + "33287", + "33288", + "33292", + "33295", + "33300", + "33302", + "33303", + "33305", + "33311", + "33318", + "33320", + "33323", + "33325", + "33330", + "33335", + "33337", + "33350", + "33358", + "33363", + "33375", + "33377", + "33383", + "33385", + "33391", + "33394", + "33397", + "33419", + "33437", + "33445", + "33458", + "33460", + "33464", + "33465", + "33470", + "33473", + "33491", + "33494", + "33496", + "33497", + "33499", + "33508", + "33509", + "33517", + "33520", + "33526", + "33530", + "33531", + "33532", + "33536", + "33544", + "33551", + "33552", + "33563", + "33564", + "33566", + "33567", + "33575", + "33584", + "33589", + "33590", + "33598", + "33609", + "33615", + "33616", + "33633", + "33635", + "33638", + "33639", + "33641", + "33645", + "33647", + "33656", + "33661", + "33669", + "33677", + "33685", + "33692", + "33703", + "33706", + "33721", + "33722", + "33726", + "33729", + "33735", + "33742", + "33748", + "33749", + "33760", + "33770", + "33801", + "33802", + "33811", + "33814", + "33816", + "33819", + "33822", + "33829", + "33832", + "33840", + "33851", + "33868", + "33871", + "33874", + "33882", + "33886", + "33888", + "33892", + "33903", + "33909", + "33912", + "33916", + "33918", + "33919", + "33922", + "33926", + "33927", + "33935", + "33940", + "33944", + "33946", + "33951", + "33962", + "33965", + "33968", + "33971", + "33981", + "33989", + "33993", + "34011", + "34021", + "34034", + "34048", + "34053", + "34057", + "34067", + "34068", + "34070", + "34079", + "34082", + "34088", + "34110", + "34111", + "34113", + "34120", + "34124", + "34140", + "34155", + "34159", + "34164", + "34178", + "34180", + "34193", + "34200", + "34202", + "34214", + "34215", + "34223", + "34232", + "34234", + "34241", + "34244", + "34248", + "34252", + "34254", + "34266", + "34270", + "34271", + "34278", + "34279", + "34280", + "34284", + "34305", + "34306", + "34310", + "34311", + "34326", + "34361", + "34362", + "34363", + "34367", + "34368", + "34369", + "34383", + "34385", + "34394", + "34397", + "34401", + "34402", + "34403", + "34404", + "34428", + "34440", + "34445", + "34450", + "34456", + "34459", + "34460", + "34461", + "34467", + "34481", + "34482", + "34485", + "34486", + "34496", + "34497", + "34500", + "34501", + "34504", + "34506", + "34507", + "34514", + "34520", + "34533", + "34541", + "34548", + "34551", + "34552", + "34559", + "34560", + "34569", + "34573", + "34589", + "34595", + "34599", + "34606", + "34611", + "34614", + "34620", + "34628", + "34630", + "34631", + "34633", + "34641", + "34650", + "34656", + "34659", + "34679", + "34684", + "34687", + "34688", + "34698", + "34706", + "34708", + "34721", + "34723", + "34728", + "34730", + "34731", + "34739", + "34749", + "34754", + "34758", + "34761", + "34764", + "34774", + "34775", + "34783", + "34794", + "34796", + "34806", + "34809", + "34820", + "34821", + "34825", + "34842", + "34850", + "34860", + "34873", + "34876", + "34879", + "34880", + "34881", + "34892", + "34893", + "34894", + "34895", + "34912", + "34913", + "34916", + "34918", + "34925", + "34931", + "34932", + "34933", + "34937", + "34940", + "34947", + "34948", + "34951", + "34957", + "34958", + "34960", + "34967", + "34969", + "34970", + "34989", + "34995", + "34997", + "35002", + "35005", + "35022", + "35023", + "35044", + "35045", + "35046", + "35051", + "35061", + "35086", + "35089", + "35092", + "35095", + "35106", + "35113", + "35128", + "35132", + "35142", + "35146", + "35147", + "35159", + "35161", + "35167", + "35174", + "35184", + "35192", + "35196", + "35224", + "35227", + "35237", + "35241", + "35242", + "35256", + "35264", + "35270", + "35274", + "35279", + "35282", + "35296", + "35297", + "35302", + "35306", + "35308", + "35312", + "35313", + "35317", + "35318", + "35326", + "35334", + "35341", + "35352", + "35353", + "35355", + "35356", + "35360", + "35362", + "35375", + "35379", + "35382", + "35385", + "35400", + "35408", + "35415", + "35428", + "35431", + "35432", + "35451", + "35454", + "35455", + "35458", + "35466", + "35467", + "35479", + "35481", + "35484", + "35487", + "35490", + "35492", + "35499", + "35501", + "35510", + "35514", + "35522", + "35526", + "35529", + "35530", + "35536", + "35540", + "35542", + "35549", + "35555", + "35559", + "35561", + "35563", + "35564", + "35565", + "35566", + "35575", + "35577", + "35580", + "35585", + "35587", + "35589", + "35591", + "35595", + "35610", + "35617", + "35622", + "35636", + "35640", + "35650", + "35653", + "35658", + "35660", + "35661", + "35669", + "35673", + "35674", + "35676", + "35682", + "35683", + "35686", + "35687", + "35689", + "35691", + "35692", + "35693", + "35697", + "35701", + "35705", + "35711", + "35713", + "35728", + "35735", + "35738", + "35739", + "35746", + "35750", + "35754", + "35757", + "35780", + "35784", + "35813", + "35822", + "35827", + "35828", + "35829", + "35831", + "35833", + "35841", + "35853", + "35854", + "35861", + "35862", + "35864", + "35866", + "35869", + "35871", + "35883", + "35888", + "35890", + "35892", + "35894", + "35895", + "35897", + "35898", + "35899", + "35903", + "35908", + "35910", + "35915", + "35922", + "35939", + "35950", + "35965", + "35968", + "35990", + "35992", + "35993", + "36018", + "36021", + "36035", + "36036", + "36043", + "36046", + "36050", + "36051", + "36056", + "36088", + "36090", + "36096", + "36101", + "36104", + "36119", + "36125", + "36127", + "36136", + "36145", + "36148", + "36150", + "36155", + "36169", + "36184", + "36195", + "36198", + "36203", + "36204", + "36214", + "36219", + "36224", + "36226", + "36258", + "36260", + "36265", + "36267", + "36270", + "36274", + "36279", + "36282", + "36286", + "36289", + "36303", + "36304", + "36312", + "36321", + "36323", + "36326", + "36329", + "36335", + "36352", + "36353", + "36362", + "36367", + "36382", + "36400", + "36405", + "36410", + "36415", + "36424", + "36425", + "36427", + "36446", + "36449", + "36453", + "36456", + "36457", + "36458", + "36468", + "36472", + "36473", + "36476", + "36486", + "36490", + "36498", + "36500", + "36505", + "36507", + "36511", + "36522", + "36529", + "36532", + "36533", + "36562", + "36564", + "36566", + "36573", + "36574", + "36575", + "36586", + "36588", + "36598", + "36605", + "36607", + "36610", + "36612", + "36613", + "36614", + "36616", + "36619", + "36625", + "36629", + "36660", + "36661", + "36669", + "36670", + "36676", + "36679", + "36695", + "36698", + "36699", + "36702", + "36710", + "36712", + "36718", + "36719", + "36728", + "36729", + "36747", + "36750", + "36753", + "36754", + "36755", + "36770", + "36773", + "36776", + "36780", + "36785", + "36788", + "36791", + "36797", + "36803", + "36812", + "36818", + "36833", + "36849", + "36862", + "36865", + "36866", + "36870", + "36888", + "36899", + "36900", + "36901", + "36905", + "36907", + "36912", + "36924", + "36931", + "36942", + "36948", + "36956", + "36958", + "36971", + "36984", + "36986", + "36994", + "36995", + "36997", + "36998", + "37005", + "37007", + "37010", + "37015", + "37017", + "37018", + "37028", + "37035", + "37046", + "37054", + "37055", + "37056", + "37067", + "37071", + "37077", + "37087", + "37090", + "37092", + "37096", + "37102", + "37107", + "37113", + "37120", + "37140", + "37144", + "37145", + "37172", + "37182", + "37187", + "37188", + "37194", + "37199", + "37200", + "37207", + "37225", + "37241", + "37242", + "37249", + "37258", + "37259", + "37265", + "37267", + "37272", + "37277", + "37279", + "37280", + "37293", + "37304", + "37310", + "37313", + "37315", + "37319", + "37322", + "37323", + "37327", + "37333", + "37335", + "37339", + "37341", + "37344", + "37349", + "37351", + "37355", + "37361", + "37363", + "37385", + "37406", + "37411", + "37414", + "37417", + "37423", + "37427", + "37428", + "37435", + "37436", + "37439", + "37440", + "37441", + "37442", + "37453", + "37457", + "37471", + "37475", + "37476", + "37477", + "37497", + "37507", + "37517", + "37519", + "37524", + "37527", + "37530", + "37533", + "37534", + "37539", + "37540", + "37541", + "37545", + "37546", + "37550", + "37568", + "37570", + "37571", + "37575", + "37581", + "37585", + "37588", + "37610", + "37614", + "37615", + "37619", + "37626", + "37635", + "37636", + "37637", + "37638", + "37664", + "37666", + "37683", + "37686", + "37688", + "37698", + "37705", + "37711", + "37713", + "37716", + "37718", + "37721", + "37722", + "37737", + "37748", + "37750", + "37753", + "37759", + "37761", + "37762", + "37766", + "37767", + "37775", + "37782", + "37784", + "37786", + "37792", + "37795", + "37800", + "37804", + "37817", + "37820", + "37828", + "37837", + "37847", + "37853", + "37858", + "37859", + "37865", + "37876", + "37879", + "37883", + "37884", + "37887", + "37888", + "37894", + "37896", + "37900", + "37912", + "37917", + "37925", + "37926", + "37933", + "37935", + "37946", + "37959", + "37967", + "37980", + "37981", + "37983", + "37987", + "37997", + "38007", + "38009", + "38015", + "38027", + "38038", + "38042", + "38076", + "38084", + "38088", + "38093", + "38105", + "38107", + "38119", + "38124", + "38128", + "38129", + "38138", + "38140", + "38154", + "38165", + "38171", + "38172", + "38173", + "38176", + "38180", + "38189", + "38200", + "38207", + "38210", + "38213", + "38221", + "38222", + "38226", + "38239", + "38251", + "38270", + "38276", + "38282", + "38291", + "38297", + "38305", + "38308", + "38314", + "38318", + "38346", + "38372", + "38373", + "38380", + "38381", + "38382", + "38393", + "38394", + "38404", + "38406", + "38409", + "38410", + "38411", + "38413", + "38424", + "38425", + "38426", + "38428", + "38429", + "38431", + "38432", + "38454", + "38455", + "38456", + "38463", + "38466", + "38470", + "38471", + "38475", + "38476", + "38480", + "38482", + "38488", + "38491", + "38494", + "38495", + "38501", + "38506", + "38536", + "38541", + "38542", + "38548", + "38549", + "38553", + "38557", + "38562", + "38565", + "38573", + "38579", + "38585", + "38587", + "38600", + "38607", + "38625", + "38637", + "38646", + "38648", + "38657", + "38659", + "38664", + "38665", + "38675", + "38676", + "38680", + "38684", + "38693", + "38698", + "38699", + "38704", + "38706", + "38707", + "38710", + "38711", + "38716", + "38722", + "38727", + "38734", + "38741", + "38743", + "38745", + "38749", + "38757", + "38760", + "38781", + "38784", + "38786", + "38788", + "38789", + "38810", + "38824", + "38835", + "38838", + "38851", + "38852", + "38857", + "38867", + "38871", + "38875", + "38877", + "38884", + "38885", + "38888", + "38890", + "38893", + "38900", + "38911", + "38914", + "38922", + "38931", + "38937", + "38941", + "38942", + "38943", + "38945", + "38956", + "38961", + "38970", + "38974", + "38979", + "38987", + "38988", + "38994", + "39007", + "39021", + "39022", + "39029", + "39033", + "39036", + "39045", + "39048", + "39049", + "39052", + "39054", + "39056", + "39062", + "39065", + "39069", + "39072", + "39075", + "39077", + "39078", + "39081", + "39082", + "39090", + "39091", + "39092", + "39093", + "39094", + "39095", + "39097", + "39099", + "39100", + "39102", + "39107", + "39123", + "39129", + "39130", + "39131", + "39151", + "39153", + "39154", + "39158", + "39159", + "39165", + "39166", + "39175", + "39178", + "39180", + "39184", + "39202", + "39203", + "39205", + "39206", + "39208", + "39215", + "39223", + "39230", + "39236", + "39238", + "39239", + "39248", + "39275", + "39287", + "39291", + "39296", + "39301", + "39303", + "39305", + "39307", + "39320", + "39321", + "39323", + "39340", + "39341", + "39351", + "39368", + "39369", + "39373", + "39379", + "39385", + "39387", + "39404", + "39406", + "39410", + "39411", + "39419", + "39424", + "39425", + "39426", + "39427", + "39428", + "39431", + "39436", + "39439", + "39443", + "39455", + "39457", + "39468", + "39472", + "39474", + "39480", + "39497", + "39500", + "39511", + "39513", + "39516", + "39529", + "39535", + "39538", + "39554", + "39555", + "39556", + "39561", + "39566", + "39570", + "39573", + "39575", + "39608", + "39613", + "39614", + "39618", + "39619", + "39622", + "39626", + "39631", + "39638", + "39640", + "39641", + "39649", + "39653", + "39654", + "39658", + "39674", + "39676", + "39678", + "39697", + "39718", + "39723", + "39724", + "39729", + "39731", + "39736", + "39737", + "39740", + "39745", + "39747", + "39752", + "39756", + "39760", + "39761", + "39764", + "39765", + "39787", + "39789", + "39790", + "39791", + "39793", + "39794", + "39798", + "39801", + "39802", + "39805", + "39806", + "39815", + "39817", + "39822", + "39826", + "39830", + "39832", + "39850", + "39855", + "39870", + "39871", + "39878", + "39886", + "39887", + "39889", + "39890", + "39893", + "39912", + "39913", + "39921", + "39928", + "39944", + "39947", + "39955", + "39961", + "39964", + "39966", + "39969", + "39970", + "39973", + "39979", + "40014", + "40015", + "40022", + "40038", + "40041", + "40042", + "40053", + "40055", + "40056", + "40058", + "40060", + "40063", + "40068", + "40070", + "40091", + "40093", + "40096", + "40101", + "40117", + "40122", + "40127", + "40128", + "40131", + "40134", + "40138", + "40140", + "40143", + "40144", + "40164", + "40167", + "40169", + "40170", + "40177", + "40178", + "40180", + "40190", + "40193", + "40197", + "40200", + "40201", + "40202", + "40208", + "40213", + "40218", + "40224", + "40243", + "40247", + "40250", + "40252", + "40253", + "40263", + "40266", + "40268", + "40276", + "40277", + "40282", + "40294", + "40296", + "40299", + "40308", + "40321", + "40333", + "40348", + "40350", + "40353", + "40355", + "40358", + "40362", + "40367", + "40375", + "40377", + "40393", + "40394", + "40401", + "40408", + "40415", + "40416", + "40421", + "40424", + "40436", + "40442", + "40450", + "40457", + "40468", + "40470", + "40474", + "40478", + "40483", + "40498", + "40506", + "40525", + "40534", + "40535", + "40536", + "40539", + "40543", + "40548", + "40556", + "40561", + "40574", + "40575", + "40584", + "40587", + "40590", + "40592", + "40604", + "40607", + "40609", + "40619", + "40626", + "40651", + "40656", + "40660", + "40669", + "40674", + "40677", + "40686", + "40689", + "40691", + "40699", + "40702", + "40712", + "40715", + "40716", + "40723", + "40731", + "40757", + "40761", + "40773", + "40777", + "40782", + "40788", + "40795", + "40804", + "40818", + "40819", + "40821", + "40827", + "40828", + "40829", + "40837", + "40840", + "40841", + "40842", + "40845", + "40849", + "40850", + "40853", + "40864", + "40870", + "40874", + "40875", + "40881", + "40887", + "40889", + "40894", + "40897", + "40901", + "40906", + "40907", + "40918", + "40922", + "40924", + "40926", + "40931", + "40946", + "40952", + "40965", + "40968", + "40974", + "40975", + "40989", + "40995", + "40997", + "41003", + "41004", + "41005", + "41009", + "41012", + "41019", + "41020", + "41034", + "41037", + "41039", + "41044", + "41054", + "41064", + "41069", + "41072", + "41079", + "41083", + "41094", + "41096", + "41108", + "41122", + "41129", + "41132", + "41134", + "41156", + "41158", + "41160", + "41181", + "41193", + "41198", + "41202", + "41204", + "41210", + "41212", + "41214", + "41223", + "41226", + "41233", + "41261", + "41265", + "41270", + "41279", + "41285", + "41292", + "41293", + "41294", + "41299", + "41304", + "41313", + "41314", + "41322", + "41338", + "41345", + "41347", + "41349", + "41350", + "41352", + "41354", + "41355", + "41358", + "41359", + "41365", + "41377", + "41392", + "41398", + "41402", + "41405", + "41411", + "41412", + "41420", + "41422", + "41429", + "41434", + "41449", + "41452", + "41453", + "41456", + "41459", + "41460", + "41467", + "41470", + "41474", + "41480", + "41481", + "41483", + "41485", + "41490", + "41499", + "41500", + "41501", + "41506", + "41514", + "41516", + "41523", + "41528", + "41543", + "41547", + "41549", + "41555", + "41556", + "41558", + "41565", + "41572", + "41573", + "41576", + "41579", + "41581", + "41588", + "41605", + "41625", + "41627", + "41633", + "41637", + "41638", + "41643", + "41645", + "41650", + "41653", + "41665", + "41666", + "41667", + "41668", + "41670", + "41678", + "41685", + "41691", + "41693", + "41695", + "41696", + "41699", + "41717", + "41728", + "41729", + "41736", + "41748", + "41771", + "41775", + "41795", + "41797", + "41806", + "41811", + "41814", + "41826", + "41834", + "41838", + "41843", + "41848", + "41849", + "41852", + "41858", + "41860", + "41872", + "41874", + "41876", + "41882", + "41888", + "41895", + "41899", + "41900", + "41908", + "41912", + "41917", + "41920", + "41922", + "41931", + "41942", + "41949", + "41950", + "41955", + "41960", + "41965", + "41972", + "41976", + "41982", + "41989", + "42000", + "42009", + "42012", + "42014", + "42016", + "42022", + "42026", + "42028", + "42047", + "42052", + "42069", + "42070", + "42071", + "42077", + "42078", + "42081", + "42087", + "42089", + "42091", + "42118", + "42122", + "42126", + "42130", + "42138", + "42144", + "42147", + "42153", + "42164", + "42166", + "42168", + "42169", + "42179", + "42181", + "42187", + "42193", + "42200", + "42205", + "42211", + "42212", + "42215", + "42217", + "42231", + "42236", + "42244", + "42256", + "42265", + "42275", + "42281", + "42288", + "42294", + "42297", + "42304", + "42309", + "42310", + "42311", + "42312", + "42313", + "42318", + "42325", + "42332", + "42335", + "42338", + "42342", + "42345", + "42346", + "42355", + "42363", + "42366", + "42368", + "42369", + "42371", + "42372", + "42385", + "42387", + "42418", + "42419", + "42423", + "42425", + "42428", + "42434", + "42440", + "42444", + "42448", + "42454", + "42458", + "42465", + "42472", + "42475", + "42477", + "42486", + "42488", + "42495", + "42499", + "42512", + "42513", + "42514", + "42515", + "42523", + "42526", + "42527", + "42531", + "42534", + "42540", + "42542", + "42549", + "42550", + "42555", + "42561", + "42569", + "42580", + "42582", + "42588", + "42592", + "42598", + "42600", + "42615", + "42617", + "42626", + "42636", + "42648", + "42666", + "42681", + "42686", + "42706", + "42710", + "42719", + "42720", + "42723", + "42736", + "42747", + "42750", + "42757", + "42758", + "42759", + "42774", + "42777", + "42779", + "42782", + "42792", + "42793", + "42816", + "42823", + "42833", + "42873", + "42884", + "42888", + "42893", + "42898", + "42905", + "42906", + "42909", + "42910", + "42912", + "42920", + "42921", + "42922", + "42926", + "42928", + "42933", + "42938", + "42947", + "42948", + "42952", + "42955", + "42987", + "43000", + "43010", + "43016", + "43028", + "43031", + "43052", + "43054", + "43055", + "43060", + "43066", + "43067", + "43074", + "43078", + "43079", + "43088", + "43091", + "43099", + "43101", + "43107", + "43108", + "43112", + "43114", + "43126", + "43136", + "43147", + "43169", + "43170", + "43182", + "43189", + "43202", + "43204", + "43212", + "43217", + "43228", + "43233", + "43235", + "43240", + "43243", + "43262", + "43264", + "43265", + "43272", + "43279", + "43288", + "43289", + "43291", + "43309", + "43311", + "43324", + "43331", + "43335", + "43338", + "43350", + "43357", + "43364", + "43372", + "43380", + "43381", + "43382", + "43385", + "43392", + "43393", + "43395", + "43399", + "43400", + "43401", + "43402", + "43412", + "43427", + "43428", + "43432", + "43443", + "43446", + "43450", + "43454", + "43457", + "43462", + "43467", + "43469", + "43470", + "43486", + "43488", + "43491", + "43494", + "43500", + "43505", + "43521", + "43522", + "43523", + "43527", + "43532", + "43538", + "43562", + "43564", + "43565", + "43571", + "43574", + "43581", + "43582", + "43588", + "43591", + "43592", + "43597", + "43601", + "43602", + "43604", + "43606", + "43607", + "43612", + "43628", + "43634", + "43644", + "43653", + "43654", + "43667", + "43676", + "43688", + "43689", + "43695", + "43710", + "43711", + "43713", + "43716", + "43717", + "43723", + "43733", + "43742", + "43751", + "43760", + "43771", + "43778", + "43783", + "43791", + "43798", + "43802", + "43805", + "43806", + "43819", + "43821", + "43825", + "43833", + "43837", + "43839", + "43854", + "43856", + "43859", + "43862", + "43864", + "43866", + "43870", + "43872", + "43874", + "43879", + "43887", + "43890", + "43897", + "43900", + "43908", + "43911", + "43915", + "43920", + "43928", + "43934", + "43938", + "43943", + "43946", + "43949", + "43955", + "43956", + "43960", + "43974", + "43982", + "43999", + "44007", + "44022", + "44026", + "44040", + "44042", + "44044", + "44045", + "44053", + "44054", + "44056", + "44057", + "44060", + "44061", + "44066", + "44078", + "44079", + "44084", + "44087", + "44096", + "44100", + "44102", + "44114", + "44130", + "44134", + "44135", + "44156", + "44163", + "44169", + "44172", + "44174", + "44187", + "44192", + "44200", + "44201", + "44202", + "44203", + "44216", + "44217", + "44220", + "44223", + "44224", + "44227", + "44230", + "44238", + "44242", + "44243", + "44244", + "44247", + "44255", + "44268", + "44269", + "44275", + "44278", + "44279", + "44281", + "44285", + "44286", + "44289", + "44294", + "44301", + "44307", + "44318", + "44319", + "44320", + "44334", + "44338", + "44339", + "44342", + "44350", + "44353", + "44354", + "44356", + "44362", + "44366", + "44367", + "44373", + "44374", + "44377", + "44390", + "44394", + "44400", + "44402", + "44405", + "44410", + "44415", + "44427", + "44429", + "44435", + "44441", + "44446", + "44458", + "44465", + "44467", + "44469", + "44471", + "44473", + "44480", + "44483", + "44496", + "44498", + "44508", + "44510", + "44515", + "44523", + "44524", + "44536", + "44555", + "44556", + "44559", + "44560", + "44561", + "44562", + "44569", + "44570", + "44574", + "44580", + "44587", + "44603", + "44608", + "44613", + "44617", + "44619", + "44624", + "44625", + "44629", + "44636", + "44638", + "44640", + "44641", + "44648", + "44654", + "44656", + "44663", + "44673", + "44691", + "44705", + "44708", + "44717", + "44748", + "44761", + "44762", + "44770", + "44772", + "44775", + "44778", + "44780", + "44784", + "44786", + "44787", + "44803", + "44811", + "44818", + "44829", + "44831", + "44833", + "44837", + "44849", + "44851", + "44852", + "44857", + "44858", + "44859", + "44861", + "44862", + "44870", + "44875", + "44882", + "44887", + "44893", + "44897", + "44898", + "44905", + "44909", + "44915", + "44916", + "44917", + "44918", + "44934", + "44936", + "44937", + "44938", + "44940", + "44949", + "44953", + "44959", + "44964", + "44972", + "44973", + "44974", + "44978", + "44984", + "44992", + "44995", + "44997", + "45020", + "45024", + "45028", + "45031", + "45048", + "45051", + "45068", + "45071", + "45076", + "45077", + "45079", + "45080", + "45087", + "45088", + "45099", + "45102", + "45104", + "45116", + "45122", + "45128", + "45136", + "45145", + "45150", + "45151", + "45158", + "45168", + "45170", + "45173", + "45179", + "45182", + "45183", + "45184", + "45185", + "45189", + "45207", + "45208", + "45210", + "45220", + "45231", + "45261", + "45264", + "45266", + "45269", + "45271", + "45289", + "45291", + "45295", + "45296", + "45309", + "45315", + "45316", + "45329", + "45345", + "45347", + "45350", + "45353", + "45364", + "45365", + "45366", + "45367", + "45370", + "45377", + "45378", + "45381", + "45388", + "45390", + "45398", + "45409", + "45412", + "45415", + "45425", + "45430", + "45446", + "45453", + "45455", + "45463", + "45475", + "45478", + "45490", + "45497", + "45499", + "45500", + "45503", + "45514", + "45523", + "45532", + "45537", + "45539", + "45540", + "45541", + "45542", + "45551", + "45563", + "45566", + "45570", + "45577", + "45582", + "45586", + "45605", + "45611", + "45614", + "45619", + "45625", + "45628", + "45630", + "45632", + "45635", + "45637", + "45638", + "45639", + "45644", + "45648", + "45649", + "45661", + "45667", + "45668", + "45671", + "45675", + "45691", + "45695", + "45703", + "45705", + "45707", + "45708", + "45715", + "45718", + "45719", + "45726", + "45729", + "45730", + "45731", + "45736", + "45741", + "45747", + "45755", + "45759", + "45761", + "45768", + "45769", + "45770", + "45771", + "45777", + "45781", + "45786", + "45802", + "45810", + "45813", + "45818", + "45821", + "45833", + "45835", + "45846", + "45848", + "45853", + "45871", + "45888", + "45890", + "45896", + "45897", + "45905", + "45909", + "45911", + "45915", + "45917", + "45919", + "45923", + "45925", + "45928", + "45930", + "45944", + "45950", + "45958", + "45959", + "45966", + "45967", + "45972", + "45976", + "45984", + "45987", + "45988", + "45992", + "45995", + "45997", + "46006", + "46009", + "46011", + "46019", + "46020", + "46022", + "46024", + "46030", + "46038", + "46042", + "46055", + "46058", + "46063", + "46067", + "46070", + "46071", + "46073", + "46078", + "46081", + "46089", + "46090", + "46092", + "46101", + "46105", + "46113", + "46118", + "46124", + "46131", + "46133", + "46139", + "46142", + "46144", + "46147", + "46158", + "46159", + "46161", + "46162", + "46164", + "46167", + "46179", + "46181", + "46182", + "46187", + "46214", + "46216", + "46218", + "46220", + "46232", + "46233", + "46246", + "46247", + "46248", + "46249", + "46251", + "46256", + "46264", + "46268", + "46279", + "46286", + "46292", + "46299", + "46301", + "46302", + "46311", + "46316", + "46325", + "46327", + "46333", + "46338", + "46342", + "46344", + "46351", + "46366", + "46369", + "46378", + "46380", + "46381", + "46382", + "46383", + "46388", + "46395", + "46408", + "46415", + "46417", + "46421", + "46422", + "46426", + "49162", + "49168", + "49169", + "49170", + "49178", + "49185", + "49186", + "49191", + "49194", + "49196", + "49198", + "49210", + "49218", + "49219", + "49223", + "49228", + "49239", + "49243", + "49249", + "49260", + "49267", + "49272", + "49278", + "49286", + "49297", + "49305", + "49306", + "49308", + "49319", + "49323", + "49327", + "49333", + "49341", + "49343", + "49344", + "49347", + "49356", + "49367", + "49369", + "49371", + "49396", + "49399", + "49401", + "49404", + "49405", + "49413", + "49416", + "49422", + "49426", + "49431", + "49434", + "49444", + "49445", + "49453", + "49459", + "49465", + "49468", + "49469", + "49480", + "49482", + "49491", + "49493", + "49503", + "49504", + "49506", + "49509", + "49511", + "49522", + "49525", + "49533", + "49538", + "49543", + "49561", + "49572", + "49576", + "49577", + "49579", + "49580", + "49585", + "49587", + "49593", + "49599", + "49609", + "49613", + "49618", + "49622", + "49636", + "49637", + "49645", + "49657", + "49683", + "49685", + "49695", + "49703", + "49708", + "49709", + "49720", + "49733", + "49737", + "49748", + "49754", + "49755", + "49761", + "49775", + "49776", + "49783", + "49798", + "49801", + "49808", + "49812", + "49815", + "49828", + "49833", + "49840", + "49841", + "49844", + "49849", + "49857", + "49861", + "49864", + "49866", + "49876", + "49890", + "49904", + "49914", + "49922", + "49931", + "49947", + "49951", + "49953", + "49964", + "49965", + "49972", + "49973", + "49978", + "49986", + "49996", + "50002", + "50007", + "50013", + "50017", + "50018", + "50034", + "50035", + "50037", + "50054", + "50063", + "50080", + "50081", + "50084", + "50098", + "50105", + "50107", + "50109", + "50110", + "50121", + "50123", + "50127", + "50138", + "50145", + "50147", + "50148", + "50154", + "50155", + "50160", + "50162", + "50166", + "50173", + "50181", + "50187", + "50188", + "50203", + "50213", + "50220", + "50229", + "50241", + "50247", + "50254", + "50268", + "50276", + "50289", + "50292", + "50299", + "50314", + "50320", + "50325", + "50346", + "50352", + "50353", + "50361", + "50368", + "50369", + "50372", + "50374", + "50378", + "50407", + "50408", + "50410", + "50418", + "50420", + "50425", + "50426", + "50432", + "50435", + "50440", + "50450", + "50451", + "50455", + "50463", + "50468", + "50472", + "50475", + "50482", + "50488", + "50497", + "50501", + "50503", + "50504", + "50519", + "50521", + "50528", + "50537", + "50540", + "50542", + "50545", + "50554", + "50559", + "50564", + "50566", + "50571", + "50575", + "50579", + "50590", + "50599", + "50603", + "50620", + "50624", + "50626", + "50637", + "50639", + "50640", + "50645", + "50649", + "50651", + "50663", + "50669", + "50687", + "50692", + "50695", + "50703", + "50712", + "50721", + "50724", + "50734", + "50743", + "50744", + "50762", + "50764", + "50767", + "50769", + "50773", + "50775", + "50776", + "50780", + "50792", + "50794", + "50803", + "50808", + "50810", + "50814", + "50817", + "50819", + "50824", + "50828", + "50832", + "50834", + "50852", + "50861", + "50867", + "50873", + "50875", + "50882", + "50899", + "50904", + "50909", + "50913", + "50921", + "50925", + "50927", + "50930", + "50936", + "50942", + "50944", + "50947", + "50952", + "50953", + "50961", + "50962", + "50975", + "50978", + "50981", + "50987", + "50994", + "51004", + "51008", + "51010", + "51011", + "51022", + "51024", + "51028", + "51032", + "51033", + "51034", + "51040", + "51041", + "51048", + "51050", + "51054", + "51070", + "51071", + "51078", + "51086", + "51087", + "51093", + "51094", + "51097", + "51110", + "51112", + "51114", + "51116", + "51117", + "51121", + "51122", + "51124", + "51132", + "51136", + "51138", + "51149", + "51156", + "51179", + "51198", + "51201", + "51202", + "51204", + "51210", + "51213", + "51217", + "51218", + "51220", + "51222", + "51228", + "51229", + "51241", + "51252", + "51261", + "51263", + "51268", + "51291", + "51292", + "51301", + "51311", + "51314", + "51316", + "51327", + "51348", + "51363", + "51371", + "51372", + "51378", + "51379", + "51384", + "51388", + "51389", + "51391", + "51400", + "51402", + "51411", + "51424", + "51425", + "51426", + "51429", + "51430", + "51435", + "51438", + "51447", + "51453", + "51459", + "51464", + "51465", + "51469", + "51476", + "51478", + "51481", + "51487", + "51493", + "51494", + "51497", + "51501", + "51503", + "51508", + "51513", + "51520", + "51523", + "51529", + "51533", + "51535", + "51537", + "51538", + "51547", + "51554", + "51559", + "51567", + "51586", + "51588", + "51589", + "51598", + "51605", + "51611", + "51616", + "51621", + "51626", + "51628", + "51634", + "51641", + "51648", + "51649", + "51671", + "51681", + "51688", + "51692", + "51700", + "51702", + "51713", + "51719", + "51723", + "51729", + "51732", + "51733", + "51748", + "51751", + "51755", + "51764", + "51769", + "51772", + "51773", + "51777", + "51778", + "51780", + "51789", + "51792", + "51803", + "51806", + "51817", + "51825", + "51833", + "51835", + "51836", + "51841", + "51847", + "51849", + "51852", + "51855", + "51856", + "51859", + "51861", + "51863", + "51864", + "51872", + "51877", + "51881", + "51887", + "51892", + "51897", + "51904", + "51906", + "51908", + "51912", + "51917", + "51926", + "51928", + "51929", + "51948", + "51951", + "51964", + "51971", + "51972", + "51973", + "51974", + "51975", + "51990", + "51992", + "51996", + "52000", + "52013", + "52021", + "52026", + "52030", + "52036", + "52039", + "52058", + "52060", + "52064", + "52070", + "52081", + "52082", + "52089", + "52092", + "52097", + "52104", + "52106", + "52116", + "52121", + "52122", + "52127", + "52133", + "52134", + "52140", + "52148", + "52152", + "52156", + "52161", + "52162", + "52167", + "52169", + "52173", + "52192", + "52193", + "52196", + "52209", + "52218", + "52228", + "52249", + "52253", + "52260", + "52261", + "52267", + "52269", + "52271", + "52272", + "52273", + "52288", + "52290", + "52301", + "52305", + "52306", + "52313", + "52315", + "52319", + "52322", + "52330", + "52342", + "52346", + "52351", + "52354", + "52363", + "52382", + "52386", + "52390", + "52392", + "52409", + "52427", + "52428", + "52436", + "52459", + "52462", + "52465", + "52485", + "52488", + "52500", + "52502", + "52506", + "52511", + "52516", + "52518", + "52520", + "52524", + "52525", + "52530", + "52548", + "52554", + "52555", + "52563", + "52572", + "52578", + "52584", + "52586", + "52587", + "52589", + "52591", + "52593", + "52609", + "52615", + "52617", + "52623", + "52628", + "52629", + "52631", + "52640", + "52648", + "52649", + "52651", + "52658", + "52670", + "52673", + "52676", + "52681", + "52686", + "52690", + "52698", + "52699", + "52710", + "52712", + "52729", + "52734", + "52742", + "52753", + "52755", + "52763", + "52770", + "52779", + "52781", + "52790", + "52793", + "52802", + "52804", + "52808", + "52817", + "52821", + "52834", + "52835", + "52837", + "52857", + "52858", + "52860", + "52863", + "52872", + "52873", + "52874", + "52878", + "52880", + "52890", + "52893", + "52907", + "52908", + "52911", + "52914", + "52925", + "52930", + "52931", + "52932", + "52936", + "52945", + "52961", + "52966", + "52967", + "52974", + "52976", + "52978", + "52981", + "52983", + "53002", + "53010", + "53022", + "53025", + "53028", + "53029", + "53030", + "53034", + "53039", + "53041", + "53042", + "53059", + "53066", + "53078", + "53081", + "53086", + "53087", + "53089", + "53093", + "53097", + "53099", + "53104", + "53114", + "53115", + "53116", + "53119", + "53121", + "53140", + "53145", + "53162", + "53172", + "53175", + "53180", + "53188", + "53190", + "53202", + "53203", + "53211", + "53212", + "53214", + "53221", + "53223", + "53233", + "53238", + "53239", + "53240", + "53242", + "53251", + "53252", + "53254", + "53255", + "53274", + "53290", + "53292", + "53294", + "53298", + "53301", + "53307", + "53313", + "53323", + "53334", + "53343", + "53367", + "53376", + "53382", + "53383", + "53392", + "53397", + "53405", + "53406", + "53408", + "53418", + "53419", + "53422", + "53423", + "53426", + "53428", + "53430", + "53432", + "53436", + "53443", + "53446", + "53451", + "53463", + "53464", + "53466", + "53469", + "53472", + "53474", + "53477", + "53492", + "53494", + "53497", + "53500", + "53509", + "53510", + "53515", + "53518", + "53535", + "53540", + "53550", + "53554", + "53569", + "53575", + "53582", + "53588", + "53609", + "53615", + "53617", + "53624", + "53629", + "53642", + "53647", + "53648", + "53654", + "53656", + "53657", + "53658", + "53659", + "53663", + "53673", + "53678", + "53680", + "53682", + "53686", + "53701", + "53703", + "53706", + "53711", + "53712", + "53729", + "53731", + "53734", + "53750", + "53763", + "53772", + "53777", + "53781", + "53786", + "53791", + "53796", + "53798", + "53803", + "53818", + "53823", + "53830", + "53832", + "53845", + "53847", + "53852", + "53858", + "53861", + "53867", + "53870", + "53879", + "53881", + "53884", + "53889", + "53895", + "53904", + "53918", + "53921", + "53925", + "53928", + "53930", + "53932", + "53933", + "53950", + "53955", + "53962", + "53963", + "53969", + "53972", + "53986", + "53992", + "53996", + "54024", + "54027", + "54029", + "54030", + "54032", + "54033", + "54035", + "54044", + "54047", + "54048", + "54049", + "54066", + "54067", + "54068", + "54072", + "54076", + "54078", + "54082", + "54086", + "54095", + "54109", + "54127", + "54132", + "54140", + "54141", + "54145", + "54148", + "54149", + "54155", + "54165", + "54187", + "54192", + "54194", + "54204", + "54213", + "54218", + "54225", + "54232", + "54251", + "54255", + "54259", + "54262", + "54270", + "54276", + "54279", + "54282", + "54285", + "54287", + "54293", + "54298", + "54301", + "54303", + "54304", + "54308", + "54312", + "54319", + "54334", + "54345", + "54348", + "54353", + "54354", + "54357", + "54361", + "54368", + "54374", + "54379", + "54383", + "54385", + "54392", + "54396", + "54397", + "54453", + "54462", + "54463", + "54467", + "54472", + "54481", + "54493", + "54495", + "54497", + "54499", + "54506", + "54511", + "54515", + "54523", + "54531", + "54532", + "54534", + "54535", + "54547", + "54549", + "54554", + "54565", + "54567", + "54580", + "54584", + "54585", + "54586", + "54599", + "54600", + "54601", + "54602", + "54607", + "54610", + "54615", + "54621", + "54628", + "54631", + "54636", + "54637", + "54640", + "54644", + "54645", + "54652", + "54655", + "54661", + "54669", + "54672", + "54676", + "54680", + "54689", + "54696", + "54700", + "54714", + "54716", + "54719", + "54721", + "54724", + "54729", + "54754", + "54756", + "54757", + "54762", + "54767", + "54769", + "54775", + "54776", + "54780", + "54787", + "54804", + "54812", + "54816", + "54837", + "54838", + "54842", + "54846", + "54847", + "54852", + "54863", + "54865", + "54869", + "54877", + "54888", + "54889", + "54891", + "54902", + "54905", + "54930", + "54931", + "54933", + "54939", + "54940", + "54948", + "54963", + "54964", + "54965", + "54967", + "54979", + "55003", + "55012", + "55016", + "55019", + "55022", + "55023", + "55024", + "55026", + "55038", + "55041", + "55043", + "55079", + "55096", + "55109", + "55116", + "55122", + "55123", + "55128", + "55134", + "55142", + "55145", + "55146", + "55147", + "55152", + "55165", + "55166", + "55182", + "55189", + "55190", + "55194", + "55200", + "55213", + "55222", + "55235", + "55250", + "55253", + "55254", + "55256", + "55261", + "55267", + "55269", + "55271", + "55278", + "55279", + "55281", + "55283", + "55296", + "55309", + "55310", + "55312", + "55315", + "55317", + "55329", + "55340", + "55346", + "55351", + "55352", + "55357", + "55364", + "55366", + "55371", + "55378", + "55379", + "55386", + "55391", + "55395", + "55397", + "55414", + "55419", + "55423", + "55437", + "55439", + "55443", + "55457", + "55465", + "55467", + "55470", + "55476", + "55480", + "55482", + "55503", + "55504", + "55514", + "55515", + "55523", + "55526", + "55537", + "55541", + "55544", + "55551", + "55565", + "55590", + "55592", + "55595", + "55627", + "55635", + "55638", + "55640", + "55642", + "55643", + "55644", + "55656", + "55661", + "55662", + "55668", + "55669", + "55672", + "55675", + "55689", + "55692", + "55715", + "55719", + "55720", + "55723", + "55725", + "55726", + "55728", + "55730", + "55733", + "55736", + "55737", + "55740", + "55751", + "55753", + "55759", + "55762", + "55767", + "55776", + "55785", + "55786", + "55805", + "55806", + "55807", + "55808", + "55822", + "55823", + "55824", + "55832", + "55852", + "55858", + "55860", + "55864", + "55869", + "55871", + "55873", + "55883", + "55884", + "55893", + "55895", + "55905", + "55912", + "55914", + "55923", + "55931", + "55932", + "55938", + "55940", + "55941", + "55942", + "55950", + "55955", + "55963", + "55973", + "55987", + "55991", + "56000", + "56002", + "56004", + "56009", + "56010", + "56013", + "56032", + "56035", + "56037", + "56038", + "56040", + "56057", + "56063", + "56064", + "56066", + "56067", + "56073", + "56074", + "56076", + "56086", + "56088", + "56094", + "56097", + "56110", + "56113", + "56114", + "56123", + "56124", + "56125", + "56142", + "56150", + "56161", + "56174", + "56178", + "56188", + "56191", + "56196", + "56198", + "56203", + "56204", + "56222", + "56227", + "56231", + "56233", + "56234", + "56239", + "56243", + "56244", + "56251", + "56262", + "56269", + "56273", + "56275", + "56276", + "56277", + "56279", + "56280", + "56281", + "56289", + "56301", + "56302", + "56304", + "56310", + "56320", + "56323", + "56333", + "56335", + "56338", + "56342", + "56348", + "56355", + "56357", + "56359", + "56360", + "56362", + "56363", + "56365", + "56376", + "56381", + "56383", + "56385", + "56395", + "56401", + "56405", + "56419", + "56421", + "56425", + "56426", + "56429", + "56433", + "56446", + "56449", + "56461", + "56464", + "56469", + "56474", + "56482", + "56484", + "56488", + "56494", + "56503", + "56504", + "56509", + "56510", + "56512", + "56515", + "56518", + "56520", + "56534", + "56536", + "56537", + "56539", + "56545", + "56546", + "56553", + "56555", + "56567", + "56577", + "56579", + "56589", + "56590", + "56594", + "56608", + "56612", + "56615", + "56630", + "56637", + "56644", + "56645", + "56650", + "56660", + "56670", + "56674", + "56682", + "56685", + "56686", + "56691", + "56692", + "56705", + "56708", + "56711", + "56712", + "56720", + "56724", + "56731", + "56739", + "56741", + "56751", + "56753", + "56766", + "56771", + "56778", + "56781", + "56788", + "56795", + "56796", + "56803", + "56807", + "56814", + "56816", + "56825", + "56836", + "56840", + "56845", + "56877", + "56878", + "56888", + "56890", + "56896", + "56901", + "56903", + "56906", + "56916", + "56921", + "56930", + "56937", + "56940", + "56944", + "56945", + "56949", + "56960", + "56962", + "56969", + "56970", + "56975", + "56976", + "56983", + "56986", + "56991", + "57001", + "57010", + "57016", + "57018", + "57029", + "57036", + "57039", + "57053", + "57058", + "57060", + "57065", + "57067", + "57069", + "57070", + "57073", + "57074", + "57081", + "57085", + "57097", + "57104", + "57123", + "57137", + "57145", + "57146", + "57148", + "57151", + "57166", + "57175", + "57176", + "57180", + "57183", + "57193", + "57198", + "57199", + "57201", + "57206", + "57216", + "57221", + "57223", + "57224", + "57229", + "57233", + "57237", + "57247", + "57253", + "57260", + "57263", + "57277", + "57281", + "57283", + "57288", + "57296", + "57302", + "57313", + "57315", + "57317", + "57322", + "57323", + "57328", + "57329", + "57350", + "57353", + "57358", + "57360", + "57361", + "57362", + "57366", + "57383", + "57392", + "57404", + "57419", + "57420", + "57433", + "57434", + "57435", + "57438", + "57444", + "57456", + "57468", + "57474", + "57480", + "57485", + "57489", + "57500", + "57510", + "57512", + "57532", + "57537", + "57550", + "57559", + "57560", + "57567", + "57572", + "57574", + "57575", + "57579", + "57583", + "57585", + "57586", + "57588", + "57592", + "57602", + "57604", + "57607", + "57612", + "57622", + "57623", + "57626", + "57636", + "57639", + "57640", + "57648", + "57658", + "57660", + "57670", + "57673", + "57674", + "57688", + "57689", + "57692", + "57702", + "57703", + "57707", + "57713", + "57718", + "57729", + "57733", + "57736", + "57744", + "57746", + "57751", + "57752", + "57756", + "57766", + "57771", + "57773", + "57776", + "57791", + "57792", + "57794", + "57804", + "57806", + "57811", + "57814", + "57824", + "57827", + "57829", + "57830", + "57831", + "57838", + "57840", + "57841", + "57843", + "57846", + "57848", + "57863", + "57870", + "57871", + "57877", + "57880", + "57889", + "57895", + "57897", + "57906", + "57915", + "57920", + "57930", + "57933", + "57934", + "57937", + "57938", + "57942", + "57950", + "57952", + "57955", + "57961", + "57964", + "57966", + "57974", + "57979", + "57986", + "57989", + "57996", + "58000", + "58007", + "58008", + "58016", + "58028", + "58040", + "58041", + "58042", + "58059", + "58068", + "58069", + "58080", + "58082", + "58090", + "58097", + "58101", + "58114", + "58116", + "58117", + "58119", + "58124", + "58130", + "58132", + "58137", + "58147", + "58155", + "58158", + "58159", + "58160", + "58165", + "58172", + "58178", + "58179", + "58181", + "58182", + "58187", + "58190", + "58216", + "58227", + "58229", + "58237", + "58248", + "58254", + "58259", + "58275", + "58282", + "58294", + "58297", + "58302", + "58311", + "58316", + "58318", + "58319", + "58321", + "58327", + "58356", + "58369", + "58381", + "58394", + "58395", + "58398", + "58403", + "58404", + "58421", + "58430", + "58434", + "58435", + "58448", + "58453", + "58455", + "58466", + "58469", + "58478", + "58480", + "58486", + "58495", + "58497", + "58499", + "58503", + "58505", + "58507", + "58513", + "58522", + "58523", + "58524", + "58533", + "58535", + "58540", + "58543", + "58551", + "58552", + "58560", + "58586", + "58593", + "58601", + "58602", + "58603", + "58614", + "58618", + "58638", + "58640", + "58644", + "58646", + "58647", + "58654", + "58655", + "58656", + "58658", + "58676", + "58677", + "58678", + "58687", + "58690", + "58692", + "58694", + "58700", + "58706", + "58734", + "58735", + "58738", + "58740", + "58752", + "58761", + "58764", + "58772", + "58776", + "58787", + "58797", + "58815", + "58821", + "58824", + "58832", + "58835", + "58839", + "58840", + "58843", + "58846", + "58854", + "58858", + "58861", + "58865", + "58871", + "58872", + "58887", + "58890", + "58891", + "58908", + "58914", + "58919", + "58924", + "58928", + "58931", + "58939", + "58942", + "58952", + "58954", + "58961", + "58963", + "58965", + "58966", + "58967", + "58974", + "58986", + "59000", + "59003", + "59006", + "59007", + "59016", + "59036", + "59039", + "59046", + "59050", + "59051", + "59054", + "59055", + "59058", + "59059", + "59067", + "59069", + "59070", + "59071", + "59072", + "59074", + "59081", + "59082", + "59085", + "59086", + "59088", + "59092", + "59093", + "59096", + "59099", + "59101", + "59105", + "59113", + "59123", + "59124", + "59130", + "59133", + "59134", + "59135", + "59137", + "59139", + "59141", + "59142", + "59144", + "59147", + "59149", + "59151", + "59153", + "59162", + "59172", + "59179", + "59182", + "59184", + "59200", + "59203", + "59206", + "59213", + "59234", + "59238", + "59239", + "59241", + "59253", + "59257", + "59261", + "59263", + "59269", + "59283", + "59289", + "59291", + "59292", + "59298", + "59299", + "59304", + "59308", + "59310", + "59311", + "59318", + "59320", + "59323", + "59326", + "59327", + "59329", + "59332", + "59334", + "59337", + "59341", + "59342", + "59348", + "59351", + "59353", + "59368", + "59371", + "59386", + "59398", + "59415", + "59417", + "59419", + "59423", + "59443", + "59445", + "59450", + "59453", + "59456", + "59461", + "59465", + "59472", + "59479", + "59480", + "59481", + "59487", + "59501", + "59502", + "59513", + "59521", + "59523", + "59525", + "59537", + "59544", + "59556", + "59561", + "59562", + "59563", + "59567", + "59570", + "59574", + "59581", + "59588", + "59597", + "59600", + "59604", + "59606", + "59608", + "59615", + "59616", + "59633", + "59639", + "59640", + "59644", + "59645", + "59650", + "59654", + "59655", + "59657", + "59664", + "59666", + "59675", + "59676", + "59693", + "59695", + "59719", + "59727", + "59736", + "59747", + "59749", + "59751", + "59754", + "59757", + "59758", + "59766", + "59782", + "59785", + "59794", + "59795", + "59813", + "59821", + "59822", + "59823", + "59825", + "59834", + "59848", + "59858", + "59862", + "59879", + "59881", + "59886", + "59889", + "59892", + "59893", + "59897", + "59900", + "59901", + "59912", + "59922", + "59927", + "59932", + "59933", + "59941", + "59962", + "59966", + "59980", + "59997", + "59999", + "60010", + "60014", + "60020", + "60023", + "60039", + "60052", + "60067", + "60069", + "60075", + "60089", + "60102", + "60105", + "60107", + "60117", + "60119", + "60124", + "60128", + "60135", + "60148", + "60149", + "60154", + "60162", + "60164", + "60171", + "60175", + "60177", + "60183", + "60189", + "60195", + "60200", + "60209", + "60215", + "60218", + "60219", + "60226", + "60233", + "60241", + "60244", + "60245", + "60250", + "60251", + "60269", + "60270", + "60277", + "60280", + "60285", + "60286", + "60288", + "60289", + "60292", + "60301", + "60307", + "60313", + "60317", + "60318", + "60319", + "60322", + "60327", + "60329", + "60334", + "60351", + "60352", + "60355", + "60360", + "60369", + "60395", + "60396", + "60403", + "60407", + "60408", + "60418", + "60419", + "60421", + "60427", + "60428", + "60434", + "60436", + "60442", + "60443", + "60447", + "60456", + "60457", + "60461", + "60462", + "60471", + "60477", + "60479", + "60487", + "60492", + "60503", + "60507", + "60520", + "60529", + "60562", + "60566", + "60573", + "60576", + "60596", + "60604", + "60612", + "60619", + "60621", + "60629", + "60638", + "60651", + "60652", + "60653", + "60655", + "60662", + "60663", + "60667", + "60674", + "60680", + "60683", + "60687", + "60693", + "60696", + "60702", + "60705", + "60708", + "60714", + "60715", + "60726", + "60734", + "60744", + "60751", + "60753", + "60754", + "60757", + "60758", + "60771", + "60784", + "60789", + "60793", + "60802", + "60803", + "60814", + "60818", + "60828", + "60833", + "60837", + "60838", + "60841", + "60852", + "60858", + "60860", + "60864", + "60893", + "60895", + "60898", + "60910", + "60915", + "60919", + "60927", + "60930", + "60938", + "60939", + "60947", + "60950", + "60956", + "60957", + "60960", + "60967", + "60970", + "60972", + "60981", + "60985", + "60996", + "61005", + "61006", + "61008", + "61009", + "76940", + "77544", + "77646", + "77687", + "77845", + "78242", + "78262", + "78420", + "78693", + "79391", + "79432", + "79806", + "79902", + "79974", + "80186", + "80269", + "80294", + "80461", + "80496", + "80865", + "80941", + "80952", + "81038", + "81057", + "81174", + "81392", + "81544", + "81748", + "81939", + "82086", + "82194", + "82215", + "82391", + "82626", + "82763", + "82851", + "82877", + "82894", + "82965", + "83159", + "84447", + "84651", + "84657", + "84769", + "84781", + "84893", + "85046", + "85099", + "85105", + "85284", + "85285", + "85318", + "85457", + "85459", + "85645", + "85730", + "86116", + "86125", + "86243", + "86667", + "86991", + "87027", + "87381", + "87410", + "87424", + "87679", + "87820", + "87844", + "87873", + "87899", + "88232", + "88255", + "88268", + "88321", + "88395", + "88481", + "88566", + "89119", + "89418", + "89545", + "89700", + "89724", + "89760", + "90098", + "90328", + "90523", + "91139", + "91232", + "91457", + "91493", + "91545", + "91676", + "91752", + "91991", + "92215", + "92364", + "92517", + "92591", + "92772", + "92866", + "93049", + "93079", + "93203", + "93680", + "94170", + "94177", + "94351", + "94416", + "94436", + "94465", + "94664", + "95069", + "95673", + "95761", + "95926", + "95988", + "96001", + "96146", + "96307", + "96754", + "96972", + "96976", + "97021", + "97429", + "98083", + "98114", + "98252", + "98294", + "98398", + "98703", + "98784", + "99358", + "99418", + "99478", + "99932", + "99943" + ], + "seed": 42, + "val_ratio": 0.2, + "fusion_type": "gated", + "loss_type": "sce", + "split": "stratified_group" +} \ No newline at end of file diff --git a/DMS/dinov3_siglip2_gated_reg/README.md b/DMS/dinov3_siglip2_gated_reg/README.md new file mode 100644 index 0000000000000000000000000000000000000000..1acf7605123adf5031f63826c7de35f8cdd0edc5 --- /dev/null +++ b/DMS/dinov3_siglip2_gated_reg/README.md @@ -0,0 +1,52 @@ +# DINOv3-SigLIP2 + Gated Multimodal Unit on Apple Dense Material Segmentation + +A material-classification **fusion head** from SegObjectMaterial. It classifies the +material of a masked object from two frozen embeddings: + +| | | +|---|---| +| vision | DINOv3 ViT-L/16 (CLS token, frozen) -> 1024-d | +| language | SigLIP2 base text encoder over Qwen3-VL-8B captions (frozen) -> 768-d | +| head | Gated Multimodal Unit (`gated`, defaults), 1,985,081 parameters | +| classes | 57 (Apple Dense Material Segmentation) | + +**This repo holds only the head.** Features must come from the same encoders, +captioner and prompts as training (see the SegObjectMaterial repository); the +encoders are downloaded from their own model pages under their own licenses. + +## Evaluation + +Held-out split recorded in `split.json` (source images never seen in training). +Single training run -- differences under ~0.5 mIoU points between heads are within +run-to-run noise. + +| mIoU | mAcc | eval samples | +|---|---|---| +| 0.4606 | 0.6403 | 186,231 | + +## Training + +```json +{ + "learning_rate": 5e-05, + "epochs": 50, + "batch_size": 32, + "weight_decay": 0.01, + "lr_schedule": "cosine", + "early_stopping_patience": 8, + "checkpoint": "best validation loss" +} +``` + +## Use + +```python +from utils.hub import load_head_from_hub # SegObjectMaterial repository +head, info = load_head_from_hub("s0um0r0y/SegObjectMaterial", "DMS/dinov3_siglip2_gated_reg") +logits = head(vision_features, language_features) # [B, 1024], [B, 768] +``` + +## Integrity + +- `model.safetensors` sha256 `651edac500aacfb32bec53e14e7b2da4c660eb67acdaa350a8a700f5cf060453` +- source config `config/config_latest_models_gated_reg.toml`, code commit `1a8130c922267fb0786a33e3854a7e00763cc38f+dirty` diff --git a/DMS/dinov3_siglip2_gated_reg/config.toml b/DMS/dinov3_siglip2_gated_reg/config.toml new file mode 100644 index 0000000000000000000000000000000000000000..beb6b0e6044c07d038710626e968119496a14537 --- /dev/null +++ b/DMS/dinov3_siglip2_gated_reg/config.toml @@ -0,0 +1,72 @@ +# REGULARISED GATED run: config.toml (gated head) trained with the SAME recipe +# as config_latest_models_lmf_reg.toml -- weight decay 1e-2, cosine LR, early +# stopping. Without this control, an LMF gain could be the recipe, not the head. +# (No modality dropout: only the LMF head implements it.) Own checkpoint. + +# Apple DMS -- LATEST-MODELS pipeline: DINOv3 ViT-L/16 (1024) + Qwen3-VL -> SigLIP2 text (768) +# +# Pair this with: +# src/vision_stream_latest_models.py + src/language_stream_latest_models.py +# run_serialization_latest_models.py -> train_latest_models.py +# +# For the base DINOv2/CLIP pipeline (run_serialization.py -> train.py) use +# config/config_dinov2_clip.toml instead -- its vision_dim is 768, not 1024. + +[data] +dataset_type = "apple_dms" +image_dir = "/images" +mask_dir = "/labels" +# Rebuilt automatically on first run; the index now stores one entry per +# CONNECTED COMPONENT, so any pre-existing labels.json must be removed first. +labels_file = "/labels_instances.json" +# Separate cache: DINOv3 features are 1024-d and must not mix with the +# 768-d DINOv2 cache written by run_serialization.py. +tensor_cache_dir = "/tensor_cache_dir_latest_models" + +# Connected-component filtering (measured on 400 real DMS masks): +# keeping every component gives 7.5x more samples than the old per-(image,class) +# scheme -- 2.45M samples / 47 GB / ~7.5x the VLM captioning time -- because 69% +# of components are under 0.1% of the frame and crop to a few pixels. +# A component is kept when area >= max(min_instance_area, min_instance_frac * frame). +min_instance_area = 1000 # absolute pixel floor +min_instance_frac = 0.001 # and at least 0.1% of the frame +max_instances_per_class = 0 # 0 = keep all; set e.g. 3 to cap the long tail + + +[model] +# fusion head: "gated" (GMU) or "mlp" (concat+MLP). Read by train_latest_models.py; a contradicting --fusion flag is an error, so checkpoint_path can't hold the wrong head. +fusion = "gated" +vision_dim = 1024 # DINOv3 ViT-L/16 CLS token +language_dim = 768 # SigLIP2 base text embedding +num_classes = 57 + +[training] +batch_size = 32 + +# Batch size for the OFFLINE SERIALIZATION pass, which is a completely different +# memory regime from training: it pushes full-resolution images through the 7B +# VLM, whereas [training].batch_size only moves cached 768-d vectors through a +# small MLP. Measured on the 23.6 GiB 4090 -- static weights 16.2 GiB, so only +# ~7.4 GiB is left: batch 8 peaks at 17.7 GiB, 16 at 19.2 GiB, and 32 OOMs. +# 8 leaves headroom for a labmate's job to coexist; raise to 16 on a free card. +serialization_batch_size = 8 +learning_rate = 5e-5 +epochs = 50 +train_ratio = 0.8 # 80% for training +val_ratio = 0.2 # 20% for validation +tensorboard_log_dir = "/dms_dinov3_siglip2_gated_reg" + +# ---- regularisation / schedule (train_latest_models.py; all optional) ---- +# The baseline runs (wd 1e-4, constant LR, 50 epochs) overfit on DMS: val loss +# bottomed at epoch 13-15 and then rose while train accuracy kept climbing. +weight_decay = 1e-2 # was 1e-4 (the default when this key is absent) +lr_schedule = "cosine" # "constant" (default) | "cosine", stepped per epoch over `epochs` +min_lr = 1e-6 # cosine floor +early_stopping_patience = 8 # stop after 8 epochs without val-loss improvement; 0 = off + +[inference] +checkpoint_path = "/best_model_dms_latest_gated_reg.pth" + +[logging] +wandb_project = "material-classification" +wandb_run_name = "dms-dinov3-siglip2-gated-reg" diff --git a/DMS/dinov3_siglip2_gated_reg/head.json b/DMS/dinov3_siglip2_gated_reg/head.json new file mode 100644 index 0000000000000000000000000000000000000000..4d93cbcf17e15822350bf44f4049118e4d088ca4 --- /dev/null +++ b/DMS/dinov3_siglip2_gated_reg/head.json @@ -0,0 +1,99 @@ +{ + "fusion": "gated", + "head": "Gated Multimodal Unit", + "head_kwargs": {}, + "vision_dim": 1024, + "language_dim": 768, + "num_classes": 57, + "classes": [ + "No label", + "Animal skin", + "Bone/teeth/horn", + "Brickwork", + "Cardboard", + "Carpet/rug", + "Ceiling tile", + "Ceramic", + "Chalkboard/blackboard", + "Clutter", + "Concrete", + "Cork/corkboard", + "Engineered stone", + "Fabric/cloth", + "Fiberglass wool", + "Fire", + "Foliage", + "Food", + "Fur", + "Gemstone/quartz", + "Glass", + "Hair", + "I cannot tell", + "Ice", + "Leather", + "Liquid, non-water", + "Metal", + "Mirror", + "Not on list", + "Paint/plaster/enamel", + "Paper", + "Pearl", + "Photograph/painting", + "Plastic, clear", + "Plastic, non-clear", + "Rubber/latex", + "Sand", + "Skin/lips", + "Sky", + "Snow", + "Soap", + "Soil/mud", + "Sponge", + "Stone, natural", + "Stone, polished", + "Styrofoam", + "Tile", + "Wallpaper", + "Water", + "Wax", + "Whiteboard", + "Wicker", + "Wood", + "Wood, tree", + "Bad polygon", + "Multiple materials", + "Asphalt" + ], + "dataset": "Apple Dense Material Segmentation", + "dataset_key": "DMS", + "encoders": { + "vision": "DINOv3 ViT-L/16 (CLS token, frozen)", + "language": "SigLIP2 base text encoder over Qwen3-VL-8B captions (frozen)", + "short": "DINOv3-SigLIP2", + "slug": "dinov3_siglip2" + }, + "parameters": 1985081, + "training": { + "learning_rate": 5e-05, + "epochs": 50, + "batch_size": 32, + "weight_decay": 0.01, + "lr_schedule": "cosine", + "early_stopping_patience": 8, + "checkpoint": "best validation loss" + }, + "sha256": { + "safetensors": "651edac500aacfb32bec53e14e7b2da4c660eb67acdaa350a8a700f5cf060453", + "pth": "b3dd5b15372df360a54de3889039b15cced829cbe485bfd4ab07e0e92bc9d340" + }, + "source": { + "config": "config/config_latest_models_gated_reg.toml", + "git_commit": "1a8130c922267fb0786a33e3854a7e00763cc38f+dirty", + "checkpoint_mtime": "2026-10-07T18:00:41" + }, + "metrics": { + "mIoU": 0.4606188697826707, + "mAcc": 0.6402625240517726, + "eval_samples": 186231 + } +} \ No newline at end of file diff --git a/DMS/dinov3_siglip2_gated_reg/metrics.json b/DMS/dinov3_siglip2_gated_reg/metrics.json new file mode 100644 index 0000000000000000000000000000000000000000..2ce2604bc572fce30fe41674199a4d91d42fe419 --- /dev/null +++ b/DMS/dinov3_siglip2_gated_reg/metrics.json @@ -0,0 +1,296 @@ +{ + "dataset": "DMS", + "config": "config/config_latest_models_gated_reg.toml", + "checkpoint": "/best_model_dms_latest_gated_reg.pth", + "fusion_type": "gated", + "num_eval_samples": 186231, + "mIoU": 0.4606188697826707, + "mAcc": 0.6402625240517726, + "per_class": { + "No label": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Animal skin": { + "accuracy": 0.631578947368421, + "iou": 0.4, + "support": 114 + }, + "Bone/teeth/horn": { + "accuracy": 0.75, + "iou": 0.6470588235294118, + "support": 44 + }, + "Brickwork": { + "accuracy": 0.7631814119749777, + "iou": 0.5381222432262129, + "support": 1119 + }, + "Cardboard": { + "accuracy": 0.7526881720430108, + "iou": 0.48826886493341787, + "support": 1023 + }, + "Carpet/rug": { + "accuracy": 0.8024316109422492, + "iou": 0.4708120318630365, + "support": 4935 + }, + "Ceiling tile": { + "accuracy": 0.7756539235412475, + "iou": 0.5102581072137657, + "support": 994 + }, + "Ceramic": { + "accuracy": 0.8300567933595456, + "iou": 0.6176853055916776, + "support": 2289 + }, + "Chalkboard/blackboard": { + "accuracy": 0.7302325581395349, + "iou": 0.548951048951049, + "support": 215 + }, + "Clutter": { + "accuracy": 0.4716981132075472, + "iou": 0.3424657534246575, + "support": 53 + }, + "Concrete": { + "accuracy": 0.5145102781136639, + "iou": 0.28263035536366654, + "support": 1654 + }, + "Cork/corkboard": { + "accuracy": 0.37254901960784315, + "iou": 0.21348314606741572, + "support": 51 + }, + "Engineered stone": { + "accuracy": 0.23595505617977527, + "iou": 0.1640625, + "support": 89 + }, + "Fabric/cloth": { + "accuracy": 0.7821157578965943, + "iou": 0.7193167525459488, + "support": 22668 + }, + "Fiberglass wool": { + "accuracy": 0.3, + "iou": 0.18181818181818182, + "support": 20 + }, + "Fire": { + "accuracy": 0.8, + "iou": 0.49382716049382713, + "support": 50 + }, + "Foliage": { + "accuracy": 0.9101516919486581, + "iou": 0.7878787878787878, + "support": 5142 + }, + "Food": { + "accuracy": 0.8636871508379889, + "iou": 0.6578723404255319, + "support": 895 + }, + "Fur": { + "accuracy": 0.8259860788863109, + "iou": 0.688588007736944, + "support": 431 + }, + "Gemstone/quartz": { + "accuracy": 0.68, + "iou": 0.2677165354330709, + "support": 50 + }, + "Glass": { + "accuracy": 0.7577358490566037, + "iou": 0.6721008072455208, + "support": 22525 + }, + "Hair": { + "accuracy": 0.9782991202346041, + "iou": 0.9238438105787871, + "support": 6820 + }, + "I cannot tell": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Ice": { + "accuracy": 0.5454545454545454, + "iou": 0.46875, + "support": 55 + }, + "Leather": { + "accuracy": 0.7197750702905342, + "iou": 0.43986254295532645, + "support": 2134 + }, + "Liquid, non-water": { + "accuracy": 0.4722222222222222, + "iou": 0.2698412698412698, + "support": 36 + }, + "Metal": { + "accuracy": 0.8048137157929443, + "iou": 0.5654389622422978, + "support": 9099 + }, + "Mirror": { + "accuracy": 0.6888331242158093, + "iou": 0.43364928909952605, + "support": 797 + }, + "Not on list": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Paint/plaster/enamel": { + "accuracy": 0.619308004148204, + "iou": 0.5437013739447112, + "support": 31821 + }, + "Paper": { + "accuracy": 0.8385812842738369, + "iou": 0.693562545720556, + "support": 11306 + }, + "Pearl": { + "accuracy": 0.0, + "iou": 0.0, + "support": 1 + }, + "Photograph/painting": { + "accuracy": 0.7142001198322349, + "iou": 0.38402061855670105, + "support": 1669 + }, + "Plastic, clear": { + "accuracy": 0.7065420560747664, + "iou": 0.4186046511627907, + "support": 1605 + }, + "Plastic, non-clear": { + "accuracy": 0.6639065817409766, + "iou": 0.5230263157894737, + "support": 14130 + }, + "Rubber/latex": { + "accuracy": 0.6011183597390494, + "iou": 0.3425385023898035, + "support": 1073 + }, + "Sand": { + "accuracy": 0.3409090909090909, + "iou": 0.24793388429752067, + "support": 88 + }, + "Skin/lips": { + "accuracy": 0.973601827565784, + "iou": 0.9409600130836536, + "support": 11819 + }, + "Sky": { + "accuracy": 0.9201485608170845, + "iou": 0.7038352272727273, + "support": 2154 + }, + "Snow": { + "accuracy": 0.7431192660550459, + "iou": 0.5436241610738255, + "support": 109 + }, + "Soap": { + "accuracy": 0.0, + "iou": 0.0, + "support": 7 + }, + "Soil/mud": { + "accuracy": 0.6773211567732116, + "iou": 0.3938053097345133, + "support": 657 + }, + "Sponge": { + "accuracy": 0.2777777777777778, + "iou": 0.2, + "support": 18 + }, + "Stone, natural": { + "accuracy": 0.6347256347256347, + "iou": 0.4487550665894615, + "support": 1221 + }, + "Stone, polished": { + "accuracy": 0.399737876802097, + "iou": 0.2654482158398607, + "support": 763 + }, + "Styrofoam": { + "accuracy": 0.12903225806451613, + "iou": 0.08695652173913043, + "support": 31 + }, + "Tile": { + "accuracy": 0.649852148199687, + "iou": 0.44124247076886736, + "support": 5749 + }, + "Wallpaper": { + "accuracy": 0.6175595238095238, + "iou": 0.3312051077414206, + "support": 672 + }, + "Water": { + "accuracy": 0.6696935300794552, + "iou": 0.508182601205857, + "support": 881 + }, + "Wax": { + "accuracy": 0.8771929824561403, + "iou": 0.6711409395973155, + "support": 114 + }, + "Whiteboard": { + "accuracy": 0.6636636636636637, + "iou": 0.4258188824662813, + "support": 333 + }, + "Wicker": { + "accuracy": 0.7884297520661157, + "iou": 0.5740072202166066, + "support": 605 + }, + "Wood": { + "accuracy": 0.8096232943787948, + "iou": 0.631544102668568, + "support": 15317 + }, + "Wood, tree": { + "accuracy": 0.7482993197278912, + "iou": 0.5034324942791762, + "support": 588 + }, + "Bad polygon": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Multiple materials": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Asphalt": { + "accuracy": 0.4696969696969697, + "iou": 0.3345323741007194, + "support": 198 + } + } +} \ No newline at end of file diff --git a/DMS/dinov3_siglip2_gated_reg/model.pth b/DMS/dinov3_siglip2_gated_reg/model.pth new file mode 100644 index 0000000000000000000000000000000000000000..aeb05b18080cc0eece2ec8ad5a687d0143279461 --- /dev/null +++ b/DMS/dinov3_siglip2_gated_reg/model.pth @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3dd5b15372df360a54de3889039b15cced829cbe485bfd4ab07e0e92bc9d340 +size 7959811 diff --git a/DMS/dinov3_siglip2_gated_reg/model.safetensors b/DMS/dinov3_siglip2_gated_reg/model.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..64590728db35be1235e76add7c18257662da3c1f --- /dev/null +++ b/DMS/dinov3_siglip2_gated_reg/model.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:651edac500aacfb32bec53e14e7b2da4c660eb67acdaa350a8a700f5cf060453 +size 7952748 diff --git a/DMS/dinov3_siglip2_gated_reg/split.json b/DMS/dinov3_siglip2_gated_reg/split.json new file mode 100644 index 0000000000000000000000000000000000000000..ed2d710870e464f901ddcb2864317aed506fd3c4 --- /dev/null +++ b/DMS/dinov3_siglip2_gated_reg/split.json @@ -0,0 +1,8271 @@ +{ + "val_groups": [ + "100023", + "100684", + "100767", + "100806", + "101108", + "101397", + "101542", + "101771", + "102242", + "102298", + "102300", + "102441", + "102723", + "102859", + "102949", + "103045", + "103061", + "103310", + "103351", + "103376", + "103416", + "103494", + "103686", + "103990", + "104894", + "104911", + "104917", + "105053", + "105099", + "105227", + "105355", + "105416", + "105696", + "106358", + "106446", + "106475", + "106484", + "106527", + "106788", + "106933", + "107102", + "107279", + "107305", + "107566", + "107782", + "107866", + "108158", + "108647", + "109239", + "109695", + "109726", + "109789", + "109812", + "109881", + "109999", + "110235", + "110322", + "110893", + "111049", + "111228", + "111280", + "111386", + "112424", + "112448", + "112457", + "112665", + "112857", + "113143", + "113524", + "113793", + "113890", + "114202", + "114224", + "114225", + "114241", + "114705", + "114774", + "115020", + "115498", + "115499", + "115760", + "116168", + "116191", + "116298", + "116449", + "116606", + "116733", + "117104", + "117266", + "117505", + "117707", + "118431", + "119280", + "119283", + "119321", + "119466", + "119521", + "119533", + "119783", + "119809", + "119974", + "120020", + "120125", + "120312", + "120531", + "120550", + "120678", + "120808", + "121071", + "121220", + "121316", + "121985", + "122087", + "122094", + "122153", + "122404", + "122550", + "122844", + "122964", + "123297", + "123381", + "123445", + "123516", + "123601", + "123649", + "123702", + "124102", + "124157", + "124466", + "124752", + "125018", + "125522", + "125549", + "125597", + "125898", + "125979", + "125983", + "126186", + "126431", + "126648", + "126667", + "126907", + "126987", + "127294", + "127355", + "127396", + "127586", + "127669", + "127714", + "127973", + "128106", + "128229", + "128646", + "128868", + "129361", + "129605", + "129853", + "129906", + "129979", + "130273", + "130677", + "130702", + "130741", + "130972", + "131016", + "131115", + "131213", + "131299", + "131561", + "131598", + "131633", + "131677", + "132112", + "132235", + "132287", + "132495", + "132522", + "132602", + "132652", + "132730", + "132957", + "132980", + "133073", + "133187", + "133299", + "133571", + "133998", + "134034", + "134536", + "134647", + "134744", + "134773", + "134830", + "134835", + "134865", + "135254", + "135261", + "135282", + "135490", + "135709", + "136113", + "136415", + "136496", + "136599", + "136677", + "136726", + "136786", + "136847", + "136869", + "136995", + "137430", + "137533", + "137955", + "138677", + "138726", + "139100", + "139408", + "139623", + "139650", + "139653", + "139721", + "139748", + "139977", + "140398", + "140499", + "140727", + "140777", + "141064", + "141182", + "141248", + "141855", + "142040", + "142358", + "142418", + "142569", + "142763", + "142787", + "143098", + "143149", + "143193", + "143481", + "143614", + "143630", + "143668", + "143688", + "143821", + "143884", + "144224", + "144530", + "144759", + "144762", + "144978", + "145373", + "145421", + "145538", + "147431", + "147459", + "147723", + "147858", + "147868", + "148109", + "148756", + "148810", + "148826", + "149253", + "149401", + "149468", + "150308", + "150382", + "150544", + "150565", + "150607", + "150935", + "151054", + "151243", + "151309", + "151551", + "151581", + "151726", + "151871", + "152161", + "152558", + "152760", + "152845", + "153056", + "153383", + "153617", + "153763", + "154293", + "154636", + "154681", + "154850", + "154873", + "154992", + "155063", + "155394", + "155444", + "155476", + "155920", + "156257", + "156261", + "156366", + "156674", + "157619", + "157688", + "157961", + "158086", + "158156", + "158202", + "158423", + "158990", + "159370", + "159801", + "159862", + "159919", + "159957", + "160451", + "160464", + "160982", + "161162", + "161331", + "161519", + "161576", + "161866", + "162020", + "162036", + "162092", + "162306", + "162549", + "162678", + "162798", + "163001", + "163039", + "163164", + "163254", + "163444", + "163517", + "163613", + "163825", + "163860", + "164018", + "164101", + "164713", + "164795", + "164989", + "165403", + "165521", + "165722", + "165988", + "166002", + "166374", + "166659", + "166714", + "166951", + "167223", + "167462", + "167493", + "167663", + "167917", + "168095", + "168127", + "168694", + "168971", + "169649", + "169674", + "169728", + "169817", + "169838", + "170025", + "170807", + "170875", + "170998", + "171186", + "171219", + "171460", + "171626", + "171726", + "172073", + "172138", + "172222", + "172488", + "172575", + "172763", + "172830", + "172960", + "173232", + "173248", + "173732", + "174439", + "174449", + "174521", + "174666", + "175176", + "175266", + "175356", + "175504", + "175844", + "175887", + "176175", + "176211", + "176255", + "176296", + "176375", + "176444", + "176998", + "177058", + "177108", + "177336", + "177473", + "177536", + "177680", + "177701", + "178063", + "178199", + "178270", + "178278", + "178421", + "178454", + "178973", + "179168", + "179264", + "179369", + "179600", + "179943", + "180839", + "181026", + "181157", + "181763", + "181990", + "182089", + "182267", + "182568", + "182583", + "182605", + "182793", + "182840", + "183009", + "183268", + "183662", + "183829", + "183932", + "184491", + "184676", + "184770", + "184802", + "184841", + "184892", + "185054", + "185101", + "185117", + "185165", + "185298", + "185316", + "185777", + "186172", + "186197", + "186424", + "186481", + "186585", + "186719", + "186902", + "187744", + "187814", + "187894", + "188066", + "188085", + "188778", + "189232", + "189269", + "189397", + "189485", + "189490", + "189519", + "189574", + "189751", + "190146", + "190176", + "190206", + "190249", + "190250", + "190332", + "190448", + "190477", + "190569", + "191141", + "191237", + "191400", + "191635", + "192431", + "192460", + "192557", + "192778", + "192831", + "192947", + "193267", + "193325", + "193358", + "193365", + "193374", + "193387", + "193490", + "193566", + "193574", + "193637", + "193681", + "193728", + "193737", + "193811", + "193844", + "193941", + "194054", + "194063", + "194154", + "194170", + "194195", + "194240", + "194254", + "194268", + "194280", + "194303", + "194351", + "194418", + "194489", + "194561", + "194594", + "194597", + "194642", + "194676", + "194688", + "194711", + "194735", + "194800", + "194803", + "194811", + "194814", + "194828", + "194992", + "195013", + "195016", + "195035", + "195196", + "195230", + "195238", + "195296", + "195299", + "195348", + "195405", + "195408", + "195421", + "195475", + "195509", + "195526", + "195535", + "195569", + "195618", + "195638", + "195663", + "195705", + "195709", + "195714", + "195736", + "195789", + "195791", + "195803", + "195804", + "195807", + "195829", + "195831", + "195900", + "195926", + "195938", + "195943", + "195951", + "196009", + "196030", + "196046", + "196126", + "196127", + "196165", + "196221", + "196266", + "196286", + "196293", + "196342", + "196348", + "196369", + "196391", + "196448", + "196476", + "196503", + "196528", + "196529", + "196580", + "196584", + "196604", + "196613", + "196640", + "196641", + "196692", + "196705", + "196730", + "196805", + "196815", + "196850", + "196861", + "196872", + "196888", + "196925", + "196927", + "196981", + "196988", + "196990", + "197034", + "197065", + "197078", + "197087", + "197108", + "197149", + "197206", + "197251", + "197258", + "197263", + "197269", + "197282", + "197290", + "197308", + "197323", + "197348", + "197351", + "197380", + "197432", + "197467", + "197468", + "197516", + "197616", + "197632", + "197687", + "197717", + "197730", + "197781", + "197788", + "197835", + "197884", + "197910", + "197982", + "198031", + "198034", + "198126", + "198132", + "198202", + "198298", + "198314", + "198324", + "198328", + "198348", + "198442", + "198491", + "198550", + "198552", + "198577", + "198585", + "198625", + "198681", + "198690", + "198695", + "198697", + "198706", + "198712", + "198721", + "198724", + "198730", + "198732", + "198767", + "198815", + "198825", + "198907", + "198950", + "198969", + "199023", + "199034", + "199207", + "199245", + "199256", + "199271", + "199309", + "199370", + "199386", + "199396", + "199410", + "199461", + "199477", + "199486", + "199693", + "199733", + "199768", + "199796", + "199832", + "199855", + "199896", + "199910", + "199923", + "199933", + "199947", + "200017", + "200043", + "200108", + "200127", + "200152", + "200170", + "200238", + "200272", + "200309", + "200315", + "200342", + "200413", + "200443", + "200461", + "200551", + "200611", + "200639", + "200647", + "200663", + "200669", + "200692", + "200720", + "200757", + "200765", + "200768", + "200775", + "200803", + "200808", + "200889", + "200896", + "200897", + "200922", + "200983", + "200986", + "201005", + "201020", + "201045", + "201048", + "201113", + "201154", + "201187", + "201234", + "201243", + "201249", + "201284", + "201292", + "201347", + "201388", + "201410", + "201454", + "201497", + "201554", + "201559", + "201591", + "201614", + "201691", + "201754", + "201771", + "201808", + "201852", + "201856", + "201909", + "201913", + "201920", + "201941", + "201977", + "202005", + "202034", + "202120", + "202201", + "202218", + "202236", + "202253", + "202276", + "202307", + "202321", + "202324", + "202377", + "202382", + "202454", + "202490", + "202499", + "202531", + "202546", + "202567", + "202582", + "202630", + "202645", + "202702", + "202771", + "202777", + "202814", + "202873", + "202876", + "202898", + "202942", + "203001", + "203025", + "203044", + "203076", + "203174", + "203226", + "203232", + "203237", + "203240", + "203339", + "203343", + "203372", + "203392", + "203401", + "203416", + "203463", + "203486", + "203515", + "203775", + "203842", + "203844", + "203996", + "204003", + "204018", + "204032", + "204040", + "204104", + "204108", + "204179", + "204182", + "204197", + "204211", + "204212", + "204223", + "204250", + "204271", + "204398", + "204441", + "204448", + "204488", + "204489", + "204497", + "204499", + "204590", + "204628", + "204667", + "204710", + "204790", + "204797", + "204847", + "204850", + "204895", + "204999", + "205044", + "205054", + "205061", + "205093", + "205162", + "205171", + "205189", + "205193", + "205224", + "205245", + "205256", + "205317", + "205353", + "205483", + "205626", + "205646", + "205656", + "205701", + "205732", + "205754", + "205800", + "205846", + "205858", + "205859", + "205901", + "205942", + "205954", + "206023", + "206042", + "206076", + "206132", + "206233", + "206237", + "206249", + "206259", + "206272", + "206331", + "206376", + "206506", + "206545", + "206566", + "206568", + "206577", + "206592", + "206625", + "206773", + "206848", + "206919", + "206930", + "206938", + "206960", + "206963", + "206966", + "207000", + "207006", + "207014", + "207058", + "207081", + "207082", + "207129", + "207140", + "207167", + "207266", + "207283", + "207329", + "207347", + "207351", + "207481", + "207504", + "207554", + "207575", + "207701", + "207735", + "207754", + "207756", + "207757", + "207765", + "207768", + "207789", + "207814", + "207885", + "207888", + "207923", + "207933", + "207938", + "207955", + "207971", + "208023", + "208152", + "208159", + "208160", + "208171", + "208187", + "208201", + "208429", + "208441", + "208468", + "208497", + "208513", + "208532", + "208534", + "208555", + "208578", + "208592", + "208610", + "208625", + "208663", + "208680", + "208690", + "208694", + "208702", + "208723", + "208848", + "208856", + "208864", + "208885", + "208900", + "208924", + "208967", + "208968", + "209081", + "209085", + "209114", + "209174", + "209214", + "209221", + "209313", + "209367", + "209388", + "209396", + "209406", + "209415", + "209430", + "209438", + "209615", + "209653", + "209701", + "209709", + "209726", + "209737", + "209746", + "209753", + "209760", + "209765", + "209792", + "209796", + "209812", + "209823", + "209860", + "209861", + "209895", + "209901", + "209905", + "209932", + "209996", + "210064", + "210160", + "210197", + "210227", + "210229", + "210235", + "210318", + "210331", + "210341", + "210344", + "210353", + "210398", + "210399", + "210465", + "210466", + "210469", + "210473", + "210525", + "210540", + "210567", + "210581", + "210601", + "210668", + "210687", + "210762", + "210796", + "210818", + "210904", + "210930", + "210933", + "210967", + "210996", + "211023", + "211044", + "211069", + "211096", + "211101", + "211108", + "211155", + "211212", + "211268", + "211329", + "211356", + "211531", + "211537", + "211550", + "211595", + "211596", + "211629", + "211664", + "211684", + "211715", + "211752", + "211785", + "211854", + "211859", + "211880", + "211929", + "211937", + "211973", + "211974", + "212055", + "212093", + "212149", + "212153", + "212251", + "212302", + "212366", + "212523", + "212528", + "212559", + "212580", + "212628", + "212696", + "212740", + "212915", + "212956", + "212969", + "212975", + "213064", + "213065", + "213109", + "213113", + "213213", + "213254", + "213365", + "213375", + "213380", + "213385", + "213394", + "213400", + "213503", + "213514", + "213524", + "213534", + "213551", + "213601", + "213636", + "213651", + "213664", + "213737", + "213778", + "213792", + "213816", + "213854", + "213855", + "213871", + "213880", + "213884", + "213996", + "214128", + "214181", + "214188", + "214193", + "214212", + "214272", + "214310", + "214329", + "214331", + "214347", + "214420", + "214434", + "214443", + "214469", + "214481", + "214515", + "214562", + "214633", + "214669", + "214696", + "214701", + "214717", + "214745", + "214779", + "214807", + "214830", + "214921", + "214927", + "214931", + "214990", + "215005", + "215024", + "215076", + "215099", + "215116", + "215172", + "215175", + "215181", + "215196", + "215215", + "215253", + "215308", + "215323", + "215330", + "215373", + "215435", + "215440", + "215479", + "215491", + "215533", + "215583", + "215584", + "215687", + "215693", + "215706", + "215718", + "215778", + "215807", + "215838", + "215859", + "215877", + "215924", + "215935", + "215945", + "215951", + "216020", + "216026", + "216033", + "216040", + "216069", + "216081", + "216174", + "216193", + "216196", + "216207", + "216328", + "216343", + "216430", + "216444", + "216445", + "216497", + "216500", + "216511", + "216513", + "216535", + "216765", + "216967", + "217059", + "217065", + "217076", + "217147", + "217151", + "217155", + "217181", + "217326", + "217363", + "217381", + "217412", + "217475", + "217476", + "217534", + "217565", + "217568", + "217645", + "217660", + "217675", + "217740", + "217779", + "217808", + "217830", + "217858", + "217878", + "217884", + "217908", + "217914", + "217956", + "218062", + "218063", + "218134", + "218137", + "218142", + "218173", + "218178", + "218198", + "218240", + "218281", + "218294", + "218350", + "218373", + "218385", + "218400", + "218425", + "218435", + "218475", + "218502", + "218582", + "218675", + "218687", + "218717", + "218722", + "218781", + "218833", + "218841", + "218944", + "218981", + "218985", + "219032", + "219037", + "219062", + "219065", + "219085", + "219150", + "219165", + "219246", + "219263", + "219295", + "219324", + "219332", + "219381", + "219390", + "219425", + "219454", + "219458", + "219459", + "219475", + "219485", + "219561", + "219619", + "219626", + "219641", + "219665", + "219693", + "219696", + "219740", + "219754", + "219763", + "219799", + "219807", + "219880", + "219958", + "220010", + "220046", + "220081", + "220118", + "220130", + "220140", + "220198", + "220227", + "220318", + "220326", + "220349", + "220391", + "220407", + "220408", + "220419", + "220453", + "220458", + "220471", + "220473", + "220474", + "220477", + "220485", + "220518", + "220539", + "220551", + "220553", + "220572", + "220647", + "220649", + "220653", + "220669", + "220781", + "220787", + "220809", + "220880", + "220898", + "220946", + "220968", + "220984", + "220992", + "221029", + "221030", + "221074", + "221112", + "221125", + "221176", + "221184", + "221221", + "221248", + "221277", + "221305", + "221314", + "221382", + "221400", + "221412", + "221448", + "221454", + "221470", + "221485", + "221489", + "221495", + "221505", + "221562", + "221583", + "221605", + "221606", + "221721", + "221733", + "221763", + "221773", + "221792", + "221799", + "221923", + "222027", + "222127", + "222131", + "222143", + "222191", + "222222", + "222268", + "222269", + "222332", + "222447", + "222449", + "222475", + "222498", + "222520", + "222532", + "222535", + "222560", + "222681", + "222719", + "222759", + "222817", + "222819", + "222828", + "222855", + "222966", + "222979", + "223064", + "223077", + "223106", + "223163", + "223178", + "223189", + "223194", + "223218", + "223289", + "223294", + "223311", + "223318", + "223321", + "223397", + "223401", + "223416", + "223418", + "223462", + "223476", + "223510", + "223543", + "223552", + "223662", + "223673", + "223691", + "223723", + "223838", + "223885", + "223895", + "223918", + "223928", + "223930", + "223933", + "223966", + "224017", + "224022", + "224116", + "224119", + "224172", + "224259", + "224302", + "224328", + "224379", + "224390", + "224409", + "224440", + "224443", + "224457", + "224483", + "224485", + "224496", + "224499", + "224525", + "224537", + "224538", + "224543", + "224549", + "224566", + "224596", + "224614", + "224701", + "224714", + "224754", + "224776", + "224781", + "224830", + "224891", + "22501", + "225044", + "22506", + "225063", + "22507", + "225082", + "225138", + "225162", + "225192", + "225232", + "22524", + "225253", + "225266", + "22527", + "225274", + "22530", + "225303", + "225311", + "225319", + "225327", + "225346", + "22535", + "22537", + "22541", + "225413", + "225428", + "22543", + "225442", + "225473", + "225497", + "225550", + "22556", + "225576", + "22558", + "225618", + "22564", + "22565", + "225688", + "225706", + "22572", + "22574", + "22575", + "225762", + "225766", + "22578", + "22580", + "225846", + "22585", + "225871", + "225907", + "22594", + "225968", + "225989", + "225990", + "22600", + "226008", + "22601", + "22603", + "226059", + "22606", + "226096", + "22611", + "226117", + "226202", + "226230", + "226302", + "22633", + "226336", + "22634", + "226398", + "22641", + "22642", + "226429", + "226448", + "226481", + "226488", + "226491", + "226511", + "226533", + "226566", + "22658", + "226583", + "226586", + "226598", + "226613", + "226648", + "22665", + "226668", + "226702", + "226704", + "226709", + "226767", + "226778", + "226785", + "226849", + "22685", + "22686", + "226883", + "226884", + "226892", + "226915", + "226931", + "226940", + "226958", + "22698", + "226984", + "226993", + "227008", + "22704", + "227086", + "227160", + "227162", + "227163", + "227169", + "227173", + "227182", + "227193", + "22720", + "22721", + "227211", + "227223", + "22723", + "227231", + "227245", + "227275", + "227292", + "227297", + "227314", + "227344", + "227347", + "22740", + "227410", + "227472", + "22748", + "227481", + "22750", + "22753", + "227544", + "227549", + "22756", + "22758", + "227599", + "227616", + "22762", + "227621", + "227627", + "227667", + "227670", + "227681", + "22769", + "227691", + "227697", + "22771", + "227726", + "227753", + "227779", + "22779", + "227799", + "227837", + "227848", + "227914", + "227927", + "22795", + "227967", + "227969", + "227980", + "227986", + "227991", + "228011", + "228025", + "22803", + "228035", + "228043", + "22809", + "22810", + "22814", + "22815", + "228158", + "22816", + "228166", + "228169", + "228181", + "22819", + "22821", + "228212", + "22823", + "228238", + "228253", + "22827", + "228280", + "228285", + "228305", + "228351", + "22836", + "228378", + "228392", + "22842", + "228458", + "228482", + "228496", + "22854", + "228592", + "228614", + "228616", + "22868", + "228691", + "22871", + "22873", + "228771", + "228800", + "22884", + "22885", + "22891", + "228938", + "228939", + "22895", + "22896", + "228961", + "228988", + "228999", + "229024", + "229032", + "22908", + "229083", + "22918", + "229189", + "22919", + "229197", + "22920", + "229209", + "22923", + "229232", + "229235", + "229321", + "229328", + "229364", + "229378", + "229398", + "22940", + "22944", + "229440", + "229456", + "22947", + "229524", + "22953", + "22954", + "22955", + "22956", + "22957", + "22958", + "229603", + "22961", + "229613", + "229656", + "22967", + "229705", + "22971", + "229809", + "229814", + "229859", + "22986", + "229902", + "22991", + "229918", + "22993", + "229943", + "22998", + "229984", + "229994", + "23000", + "230003", + "230009", + "23001", + "230024", + "230034", + "23009", + "23010", + "230109", + "230114", + "230115", + "230118", + "23014", + "230145", + "230147", + "23016", + "230243", + "230257", + "230258", + "230276", + "230281", + "23029", + "23030", + "230305", + "230360", + "23039", + "230394", + "230403", + "230406", + "230486", + "23049", + "23051", + "230519", + "23054", + "230569", + "23058", + "23059", + "230604", + "230620", + "230644", + "23066", + "23071", + "230711", + "230729", + "230754", + "230765", + "230776", + "23080", + "230803", + "23082", + "230822", + "230825", + "23086", + "230913", + "230915", + "230917", + "23092", + "230927", + "230965", + "23098", + "23100", + "231015", + "231038", + "231065", + "23107", + "23108", + "231098", + "231100", + "231171", + "23120", + "231224", + "231236", + "23126", + "231277", + "23130", + "231312", + "231340", + "231382", + "231389", + "23145", + "23153", + "231589", + "23162", + "231633", + "23166", + "23167", + "231710", + "231722", + "23173", + "231732", + "23175", + "23179", + "231838", + "231857", + "231883", + "231902", + "231904", + "23192", + "231935", + "23200", + "23202", + "23204", + "232073", + "232080", + "232095", + "23215", + "232181", + "232190", + "23221", + "232213", + "232235", + "232263", + "232338", + "23234", + "23239", + "232407", + "232434", + "232445", + "23246", + "232480", + "232488", + "232523", + "23256", + "23259", + "232594", + "23260", + "23263", + "232630", + "23264", + "23266", + "232693", + "232698", + "232700", + "232702", + "23272", + "232738", + "232764", + "23278", + "232787", + "23281", + "23284", + "23285", + "23287", + "232875", + "232878", + "23288", + "232885", + "23294", + "232948", + "232970", + "232972", + "232976", + "232998", + "233008", + "233009", + "233015", + "233034", + "233037", + "23308", + "23309", + "23310", + "233119", + "23312", + "233141", + "233208", + "23321", + "23322", + "23324", + "233246", + "233267", + "233282", + "233299", + "23332", + "233326", + "233330", + "23340", + "23353", + "23357", + "23359", + "23372", + "23374", + "23375", + "23383", + "23388", + "23395", + "23402", + "23404", + "23406", + "23409", + "23413", + "23420", + "23434", + "23441", + "23443", + "23453", + "23454", + "23462", + "23463", + "23464", + "23467", + "23475", + "23480", + "23485", + "23489", + "23490", + "23502", + "23504", + "23509", + "23510", + "23514", + "23516", + "23541", + "23542", + "23548", + "23549", + "23551", + "23555", + "23559", + "23578", + "23579", + "23583", + "23585", + "23589", + "23591", + "23612", + "23616", + "23621", + "23627", + "23637", + "23652", + "23654", + "23656", + "23657", + "23668", + "23681", + "23686", + "23692", + "23696", + "23697", + "23701", + "23702", + "23709", + "23739", + "23744", + "23753", + "23756", + "23764", + "23766", + "23774", + "23776", + "23784", + "23785", + "23794", + "23796", + "23799", + "23803", + "23823", + "23824", + "23825", + "23827", + "23835", + "23846", + "23855", + "23859", + "23868", + "23871", + "23876", + "23890", + "23891", + "23893", + "23895", + "23896", + "23897", + "23901", + "23906", + "23921", + "23928", + "23933", + "23945", + "23950", + "23953", + "23955", + "23960", + "23967", + "23973", + "23980", + "23981", + "23984", + "23988", + "23993", + "23995", + "23999", + "24005", + "24019", + "24022", + "24024", + "24029", + "24032", + "24033", + "24036", + "24037", + "24039", + "24043", + "24047", + "24056", + "24059", + "24060", + "24061", + "24072", + "24079", + "24085", + "24090", + "24101", + "24106", + "24112", + "24113", + "24118", + "24119", + "24123", + "24130", + "24131", + "24134", + "24136", + "24138", + "24142", + "24164", + "24168", + "24171", + "24176", + "24181", + "24184", + "24192", + "24197", + "24198", + "24200", + "24219", + "24223", + "24227", + "24230", + "24241", + "24246", + "24250", + "24251", + "24255", + "24263", + "24264", + "24269", + "24273", + "24275", + "24278", + "24284", + "24297", + "24303", + "24305", + "24309", + "24315", + "24323", + "24326", + "24333", + "24337", + "24338", + "24339", + "24341", + "24344", + "24353", + "24361", + "24373", + "24383", + "24390", + "24393", + "24396", + "24400", + "24404", + "24405", + "24410", + "24412", + "24433", + "24436", + "24438", + "24441", + "24446", + "24452", + "24453", + "24464", + "24466", + "24469", + "24487", + "24493", + "24500", + "24508", + "24513", + "24516", + "24517", + "24524", + "24527", + "24531", + "24541", + "24549", + "24557", + "24567", + "24578", + "24579", + "24580", + "24585", + "24588", + "24590", + "24599", + "24600", + "24616", + "24627", + "24630", + "24632", + "24633", + "24637", + "24639", + "24645", + "24649", + "24651", + "24655", + "24657", + "24668", + "24670", + "24676", + "24684", + "24688", + "24689", + "24692", + "24702", + "24704", + "24711", + "24716", + "24717", + "24733", + "24736", + "24739", + "24743", + "24769", + "24774", + "24777", + "24779", + "24782", + "24789", + "24798", + "24799", + "24801", + "24808", + "24822", + "24824", + "24832", + "24836", + "24849", + "24855", + "24863", + "24872", + "24879", + "24881", + "24884", + "24885", + "24886", + "24887", + "24888", + "24894", + "24895", + "24898", + "24902", + "24908", + "24917", + "24925", + "24928", + "24932", + "24940", + "24945", + "24956", + "24959", + "24962", + "24963", + "24968", + "24969", + "24983", + "24985", + "24986", + "24991", + "24995", + "24999", + "25001", + "25007", + "25009", + "25011", + "25012", + "25015", + "25018", + "25020", + "25021", + "25025", + "25031", + "25045", + "25049", + "25054", + "25058", + "25071", + "25081", + "25082", + "25087", + "25091", + "25105", + "25108", + "25112", + "25113", + "25117", + "25119", + "25124", + "25125", + "25129", + "25143", + "25145", + "25160", + "25168", + "25176", + "25186", + "25187", + "25193", + "25194", + "25196", + "25199", + "25207", + "25211", + "25215", + "25217", + "25218", + "25227", + "25245", + "25254", + "25270", + "25284", + "25288", + "25296", + "25299", + "25305", + "25333", + "25337", + "25338", + "25347", + "25349", + "25350", + "25353", + "25355", + "25358", + "25370", + "25393", + "25403", + "25412", + "25413", + "25414", + "25417", + "25422", + "25423", + "25425", + "25428", + "25434", + "25437", + "25449", + "25450", + "25451", + "25452", + "25471", + "25473", + "25474", + "25480", + "25485", + "25486", + "25495", + "25508", + "25509", + "25512", + "25514", + "25518", + "25520", + "25523", + "25524", + "25527", + "25530", + "25531", + "25539", + "25542", + "25544", + "25545", + "25554", + "25561", + "25565", + "25566", + "25577", + "25579", + "25582", + "25587", + "25597", + "25598", + "25601", + "25611", + "25619", + "25622", + "25632", + "25635", + "25637", + "25639", + "25643", + "25647", + "25654", + "25661", + "25665", + "25672", + "25674", + "25677", + "25679", + "25682", + "25686", + "25688", + "25693", + "25696", + "25699", + "25700", + "25704", + "25706", + "25711", + "25712", + "25718", + "25722", + "25726", + "25728", + "25734", + "25740", + "25743", + "25745", + "25747", + "25750", + "25780", + "25785", + "25787", + "25798", + "25799", + "25816", + "25819", + "25823", + "25825", + "25830", + "25834", + "25841", + "25848", + "25853", + "25854", + "25861", + "25863", + "25866", + "25868", + "25869", + "25874", + "25879", + "25899", + "25904", + "25905", + "25913", + "25941", + "25944", + "25945", + "25948", + "25950", + "25953", + "25959", + "25971", + "25973", + "25974", + "25980", + "25983", + "25990", + "25992", + "25994", + "25998", + "25999", + "26004", + "26015", + "26016", + "26017", + "26020", + "26021", + "26024", + "26032", + "26033", + "26039", + "26043", + "26047", + "26053", + "26062", + "26070", + "26074", + "26084", + "26089", + "26093", + "26094", + "26107", + "26108", + "26120", + "26136", + "26144", + "26155", + "26157", + "26159", + "26162", + "26168", + "26170", + "26173", + "26180", + "26184", + "26190", + "26191", + "26197", + "26203", + "26216", + "26220", + "26233", + "26235", + "26243", + "26244", + "26245", + "26253", + "26256", + "26277", + "26281", + "26284", + "26286", + "26289", + "26291", + "26299", + "26316", + "26325", + "26327", + "26347", + "26348", + "26351", + "26352", + "26354", + "26358", + "26359", + "26360", + "26365", + "26371", + "26375", + "26388", + "26399", + "26410", + "26412", + "26414", + "26426", + "26437", + "26438", + "26439", + "26452", + "26477", + "26481", + "26485", + "26486", + "26489", + "26517", + "26526", + "26530", + "26539", + "26541", + "26546", + "26558", + "26560", + "26571", + "26576", + "26577", + "26578", + "26579", + "26581", + "26603", + "26615", + "26620", + "26625", + "26631", + "26643", + "26644", + "26645", + "26658", + "26661", + "26666", + "26670", + "26671", + "26683", + "26685", + "26686", + "26692", + "26696", + "26699", + "26700", + "26707", + "26711", + "26718", + "26735", + "26736", + "26745", + "26748", + "26753", + "26760", + "26762", + "26764", + "26766", + "26768", + "26773", + "26780", + "26785", + "26790", + "26800", + "26808", + "26811", + "26817", + "26818", + "26819", + "26821", + "26833", + "26858", + "26861", + "26872", + "26874", + "26875", + "26878", + "26884", + "26892", + "26895", + "26897", + "26912", + "26918", + "26926", + "26929", + "26937", + "26944", + "26954", + "26958", + "26964", + "26966", + "26968", + "26969", + "26976", + "26980", + "26981", + "26991", + "26992", + "27024", + "27027", + "27028", + "27031", + "27033", + "27042", + "27043", + "27046", + "27050", + "27065", + "27067", + "27078", + "27084", + "27093", + "27121", + "27130", + "27138", + "27144", + "27145", + "27163", + "27172", + "27176", + "27192", + "27193", + "27197", + "27198", + "27200", + "27204", + "27206", + "27223", + "27224", + "27234", + "27236", + "27239", + "27247", + "27249", + "27254", + "27261", + "27268", + "27270", + "27276", + "27277", + "27282", + "27283", + "27284", + "27295", + "27296", + "27301", + "27305", + "27307", + "27313", + "27316", + "27321", + "27323", + "27326", + "27332", + "27346", + "27355", + "27358", + "27361", + "27365", + "27368", + "27369", + "27370", + "27374", + "27382", + "27387", + "27391", + "27395", + "27407", + "27409", + "27421", + "27430", + "27432", + "27436", + "27437", + "27443", + "27444", + "27450", + "27452", + "27458", + "27467", + "27468", + "27473", + "27474", + "27485", + "27487", + "27492", + "27496", + "27497", + "27499", + "27502", + "27508", + "27509", + "27512", + "27519", + "27525", + "27527", + "27529", + "27543", + "27549", + "27553", + "27559", + "27560", + "27570", + "27576", + "27577", + "27579", + "27581", + "27584", + "27592", + "27594", + "27601", + "27604", + "27607", + "27608", + "27611", + "27612", + "27619", + "27624", + "27626", + "27642", + "27648", + "27658", + "27660", + "27671", + "27682", + "27687", + "27688", + "27703", + "27705", + "27714", + "27716", + "27721", + "27722", + "27732", + "27734", + "27740", + "27743", + "27747", + "27749", + "27750", + "27757", + "27760", + "27766", + "27773", + "27780", + "27783", + "27789", + "27798", + "27800", + "27815", + "27817", + "27832", + "27833", + "27836", + "27850", + "27852", + "27858", + "27869", + "27876", + "27877", + "27879", + "27880", + "27881", + "27883", + "27888", + "27893", + "27920", + "27931", + "27935", + "27936", + "27938", + "27940", + "27941", + "27943", + "27947", + "27949", + "27956", + "27962", + "27970", + "27986", + "28006", + "28007", + "28008", + "28013", + "28026", + "28027", + "28028", + "28031", + "28038", + "28039", + "28045", + "28047", + "28050", + "28052", + "28061", + "28069", + "28070", + "28072", + "28073", + "28081", + "28082", + "28090", + "28100", + "28106", + "28109", + "28110", + "28112", + "28116", + "28119", + "28121", + "28122", + "28134", + "28141", + "28150", + "28153", + "28155", + "28158", + "28159", + "28160", + "28162", + "28163", + "28169", + "28177", + "28181", + "28182", + "28183", + "28190", + "28191", + "28197", + "28205", + "28207", + "28208", + "28209", + "28212", + "28218", + "28223", + "28226", + "28228", + "28229", + "28232", + "28241", + "28242", + "28244", + "28249", + "28252", + "28261", + "28262", + "28263", + "28272", + "28273", + "28278", + "28285", + "28294", + "28296", + "28299", + "28311", + "28319", + "28320", + "28323", + "28332", + "28338", + "28346", + "28350", + "28360", + "28372", + "28376", + "28378", + "28382", + "28383", + "28390", + "28392", + "28395", + "28396", + "28411", + "28416", + "28423", + "28441", + "28452", + "28453", + "28463", + "28467", + "28471", + "28473", + "28476", + "28479", + "28483", + "28489", + "28498", + "28499", + "28501", + "28503", + "28504", + "28512", + "28515", + "28517", + "28519", + "28526", + "28538", + "28540", + "28541", + "28542", + "28546", + "28548", + "28553", + "28557", + "28558", + "28560", + "28583", + "28584", + "28591", + "28595", + "28598", + "28600", + "28601", + "28607", + "28609", + "28611", + "28612", + "28616", + "28621", + "28622", + "28631", + "28645", + "28647", + "28660", + "28661", + "28662", + "28665", + "28675", + "28682", + "28685", + "28691", + "28697", + "28699", + "28700", + "28708", + "28719", + "28724", + "28725", + "28727", + "28728", + "28740", + "28741", + "28744", + "28747", + "28749", + "28760", + "28763", + "28764", + "28777", + "28778", + "28782", + "28788", + "28793", + "28794", + "28797", + "28798", + "28803", + "28827", + "28831", + "28833", + "28842", + "28844", + "28846", + "28847", + "28863", + "28867", + "28885", + "28888", + "28895", + "28898", + "28902", + "28912", + "28914", + "28919", + "28923", + "28925", + "28927", + "28939", + "28940", + "28945", + "28949", + "28951", + "28954", + "28956", + "28958", + "28960", + "28972", + "28973", + "28981", + "28982", + "28992", + "29010", + "29022", + "29034", + "29036", + "29040", + "29059", + "29060", + "29072", + "29074", + "29075", + "29077", + "29086", + "29094", + "29095", + "29104", + "29106", + "29107", + "29111", + "29121", + "29124", + "29130", + "29132", + "29147", + "29184", + "29190", + "29215", + "29222", + "29223", + "29242", + "29249", + "29258", + "29260", + "29263", + "29266", + "29281", + "29285", + "29291", + "29304", + "29309", + "29310", + "29315", + "29318", + "29321", + "29326", + "29340", + "29345", + "29347", + "29360", + "29361", + "29366", + "29371", + "29377", + "29394", + "29399", + "29404", + "29406", + "29411", + "29443", + "29447", + "29453", + "29462", + "29468", + "29479", + "29495", + "29499", + "29505", + "29507", + "29509", + "29515", + "29519", + "29524", + "29530", + "29544", + "29546", + "29547", + "29555", + "29563", + "29566", + "29573", + "29575", + "29576", + "29578", + "29590", + "29591", + "29607", + "29634", + "29635", + "29644", + "29645", + "29650", + "29652", + "29658", + "29662", + "29663", + "29676", + "29679", + "29680", + "29684", + "29692", + "29696", + "29699", + "29704", + "29705", + "29707", + "29719", + "29723", + "29725", + "29726", + "29729", + "29735", + "29742", + "29750", + "29762", + "29769", + "29772", + "29774", + "29780", + "29781", + "29792", + "29801", + "29806", + "29811", + "29816", + "29817", + "29821", + "29832", + "29834", + "29836", + "29838", + "29841", + "29843", + "29846", + "29847", + "29853", + "29858", + "29861", + "29868", + "29870", + "29871", + "29883", + "29894", + "29896", + "29898", + "29905", + "29908", + "29911", + "29914", + "29918", + "29927", + "29931", + "29933", + "29941", + "29949", + "29955", + "29961", + "29964", + "29966", + "29967", + "29976", + "29980", + "29983", + "29984", + "29994", + "29997", + "30002", + "30010", + "30021", + "30027", + "30028", + "30029", + "30034", + "30038", + "30047", + "30048", + "30049", + "30050", + "30051", + "30061", + "30064", + "30071", + "30074", + "30075", + "30077", + "30082", + "30087", + "30093", + "30100", + "30101", + "30102", + "30109", + "30117", + "30124", + "30131", + "30134", + "30143", + "30145", + "30154", + "30155", + "30173", + "30177", + "30197", + "30201", + "30203", + "30210", + "30214", + "30216", + "30221", + "30223", + "30231", + "30239", + "30240", + "30242", + "30245", + "30247", + "30254", + "30260", + "30271", + "30272", + "30284", + "30289", + "30296", + "30307", + "30310", + "30312", + "30313", + "30319", + "30328", + "30331", + "30340", + "30345", + "30346", + "30348", + "30356", + "30360", + "30365", + "30375", + "30382", + "30402", + "30403", + "30405", + "30410", + "30414", + "30436", + "30440", + "30441", + "30444", + "30454", + "30457", + "30473", + "30474", + "30476", + "30485", + "30496", + "30501", + "30506", + "30507", + "30513", + "30521", + "30522", + "30524", + "30529", + "30531", + "30534", + "30541", + "30548", + "30551", + "30555", + "30556", + "30560", + "30563", + "30565", + "30567", + "30586", + "30588", + "30590", + "30599", + "30604", + "30614", + "30650", + "30653", + "30656", + "30663", + "30666", + "30667", + "30669", + "30678", + "30689", + "30700", + "30704", + "30711", + "30727", + "30728", + "30729", + "30731", + "30745", + "30746", + "30748", + "30750", + "30759", + "30760", + "30766", + "30771", + "30781", + "30782", + "30794", + "30797", + "30805", + "30813", + "30818", + "30821", + "30848", + "30849", + "30854", + "30868", + "30869", + "30873", + "30874", + "30879", + "30893", + "30896", + "30902", + "30908", + "30911", + "30913", + "30917", + "30918", + "30931", + "30943", + "30949", + "30954", + "30959", + "30964", + "30974", + "30977", + "30981", + "30985", + "30996", + "30997", + "31003", + "31020", + "31025", + "31032", + "31061", + "31064", + "31065", + "31076", + "31082", + "31091", + "31104", + "31105", + "31115", + "31121", + "31123", + "31132", + "31134", + "31138", + "31145", + "31149", + "31154", + "31156", + "31166", + "31167", + "31168", + "31169", + "31170", + "31177", + "31182", + "31183", + "31188", + "31196", + "31198", + "31199", + "31210", + "31227", + "31230", + "31234", + "31244", + "31245", + "31251", + "31252", + "31258", + "31267", + "31275", + "31280", + "31281", + "31282", + "31292", + "31306", + "31307", + "31308", + "31311", + "31312", + "31313", + "31320", + "31330", + "31350", + "31358", + "31359", + "31363", + "31365", + "31381", + "31393", + "31395", + "31396", + "31405", + "31408", + "31414", + "31416", + "31425", + "31426", + "31429", + "31434", + "31437", + "31440", + "31443", + "31448", + "31460", + "31463", + "31469", + "31478", + "31482", + "31485", + "31490", + "31503", + "31509", + "31521", + "31527", + "31538", + "31541", + "31543", + "31546", + "31552", + "31554", + "31563", + "31564", + "31573", + "31579", + "31589", + "31601", + "31602", + "31614", + "31619", + "31623", + "31636", + "31648", + "31654", + "31659", + "31678", + "31688", + "31689", + "31693", + "31711", + "31717", + "31721", + "31725", + "31727", + "31729", + "31731", + "31733", + "31737", + "31740", + "31742", + "31745", + "31748", + "31764", + "31769", + "31772", + "31777", + "31779", + "31785", + "31796", + "31801", + "31810", + "31813", + "31818", + "31819", + "31821", + "31823", + "31824", + "31825", + "31826", + "31828", + "31830", + "31837", + "31845", + "31847", + "31850", + "31851", + "31855", + "31856", + "31857", + "31866", + "31883", + "31889", + "31892", + "31903", + "31907", + "31909", + "31915", + "31919", + "31922", + "31924", + "31927", + "31928", + "31944", + "31945", + "31958", + "31960", + "31963", + "31964", + "31966", + "31971", + "31973", + "31980", + "31986", + "31991", + "31992", + "31994", + "31997", + "32011", + "32016", + "32020", + "32027", + "32029", + "32031", + "32034", + "32039", + "32057", + "32065", + "32073", + "32074", + "32080", + "32082", + "32083", + "32089", + "32091", + "32097", + "32099", + "32100", + "32101", + "32107", + "32109", + "32115", + "32128", + "32141", + "32148", + "32156", + "32177", + "32178", + "32184", + "32187", + "32194", + "32195", + "32196", + "32197", + "32201", + "32212", + "32213", + "32225", + "32231", + "32237", + "32241", + "32247", + "32249", + "32250", + "32265", + "32268", + "32270", + "32276", + "32277", + "32280", + "32281", + "32285", + "32287", + "32288", + "32293", + "32296", + "32305", + "32307", + "32314", + "32326", + "32331", + "32332", + "32342", + "32347", + "32350", + "32362", + "32368", + "32370", + "32376", + "32377", + "32382", + "32385", + "32387", + "32395", + "32412", + "32415", + "32421", + "32430", + "32431", + "32434", + "32435", + "32437", + "32439", + "32452", + "32460", + "32465", + "32467", + "32471", + "32473", + "32474", + "32485", + "32492", + "32495", + "32499", + "32509", + "32515", + "32519", + "32525", + "32527", + "32538", + "32545", + "32551", + "32564", + "32567", + "32568", + "32578", + "32590", + "32601", + "32603", + "32604", + "32607", + "32609", + "32610", + "32613", + "32615", + "32630", + "32631", + "32634", + "32645", + "32646", + "32659", + "32661", + "32665", + "32673", + "32675", + "32678", + "32682", + "32701", + "32702", + "32704", + "32705", + "32709", + "32717", + "32732", + "32742", + "32756", + "32759", + "32763", + "32771", + "32773", + "32774", + "32777", + "32779", + "32781", + "32783", + "32787", + "32791", + "32796", + "32805", + "32808", + "32815", + "32821", + "32826", + "32833", + "32836", + "32847", + "32852", + "32854", + "32858", + "32867", + "32872", + "32884", + "32886", + "32903", + "32907", + "32914", + "32921", + "32922", + "32934", + "32936", + "32941", + "32945", + "32948", + "32963", + "32964", + "32968", + "32976", + "32980", + "32983", + "32984", + "33007", + "33010", + "33025", + "33027", + "33032", + "33035", + "33037", + "33049", + "33050", + "33053", + "33054", + "33057", + "33066", + "33067", + "33073", + "33077", + "33079", + "33085", + "33086", + "33087", + "33091", + "33095", + "33097", + "33104", + "33112", + "33114", + "33121", + "33122", + "33123", + "33133", + "33138", + "33139", + "33140", + "33141", + "33143", + "33158", + "33161", + "33174", + "33175", + "33176", + "33184", + "33189", + "33191", + "33198", + "33201", + "33207", + "33213", + "33217", + "33218", + "33219", + "33227", + "33231", + "33234", + "33237", + "33238", + "33239", + "33252", + "33256", + "33257", + "33273", + "33279", + "33283", + "33286", + "33287", + "33288", + "33292", + "33295", + "33300", + "33302", + "33303", + "33305", + "33311", + "33318", + "33320", + "33323", + "33325", + "33330", + "33335", + "33337", + "33350", + "33358", + "33363", + "33375", + "33377", + "33383", + "33385", + "33391", + "33394", + "33397", + "33419", + "33437", + "33445", + "33458", + "33460", + "33464", + "33465", + "33470", + "33473", + "33491", + "33494", + "33496", + "33497", + "33499", + "33508", + "33509", + "33517", + "33520", + "33526", + "33530", + "33531", + "33532", + "33536", + "33544", + "33551", + "33552", + "33563", + "33564", + "33566", + "33567", + "33575", + "33584", + "33589", + "33590", + "33598", + "33609", + "33615", + "33616", + "33633", + "33635", + "33638", + "33639", + "33641", + "33645", + "33647", + "33656", + "33661", + "33669", + "33677", + "33685", + "33692", + "33703", + "33706", + "33721", + "33722", + "33726", + "33729", + "33735", + "33742", + "33748", + "33749", + "33760", + "33770", + "33801", + "33802", + "33811", + "33814", + "33816", + "33819", + "33822", + "33829", + "33832", + "33840", + "33851", + "33868", + "33871", + "33874", + "33882", + "33886", + "33888", + "33892", + "33903", + "33909", + "33912", + "33916", + "33918", + "33919", + "33922", + "33926", + "33927", + "33935", + "33940", + "33944", + "33946", + "33951", + "33962", + "33965", + "33968", + "33971", + "33981", + "33989", + "33993", + "34011", + "34021", + "34034", + "34048", + "34053", + "34057", + "34067", + "34068", + "34070", + "34079", + "34082", + "34088", + "34110", + "34111", + "34113", + "34120", + "34124", + "34140", + "34155", + "34159", + "34164", + "34178", + "34180", + "34193", + "34200", + "34202", + "34214", + "34215", + "34223", + "34232", + "34234", + "34241", + "34244", + "34248", + "34252", + "34254", + "34266", + "34270", + "34271", + "34278", + "34279", + "34280", + "34284", + "34305", + "34306", + "34310", + "34311", + "34326", + "34361", + "34362", + "34363", + "34367", + "34368", + "34369", + "34383", + "34385", + "34394", + "34397", + "34401", + "34402", + "34403", + "34404", + "34428", + "34440", + "34445", + "34450", + "34456", + "34459", + "34460", + "34461", + "34467", + "34481", + "34482", + "34485", + "34486", + "34496", + "34497", + "34500", + "34501", + "34504", + "34506", + "34507", + "34514", + "34520", + "34533", + "34541", + "34548", + "34551", + "34552", + "34559", + "34560", + "34569", + "34573", + "34589", + "34595", + "34599", + "34606", + "34611", + "34614", + "34620", + "34628", + "34630", + "34631", + "34633", + "34641", + "34650", + "34656", + "34659", + "34679", + "34684", + "34687", + "34688", + "34698", + "34706", + "34708", + "34721", + "34723", + "34728", + "34730", + "34731", + "34739", + "34749", + "34754", + "34758", + "34761", + "34764", + "34774", + "34775", + "34783", + "34794", + "34796", + "34806", + "34809", + "34820", + "34821", + "34825", + "34842", + "34850", + "34860", + "34873", + "34876", + "34879", + "34880", + "34881", + "34892", + "34893", + "34894", + "34895", + "34912", + "34913", + "34916", + "34918", + "34925", + "34931", + "34932", + "34933", + "34937", + "34940", + "34947", + "34948", + "34951", + "34957", + "34958", + "34960", + "34967", + "34969", + "34970", + "34989", + "34995", + "34997", + "35002", + "35005", + "35022", + "35023", + "35044", + "35045", + "35046", + "35051", + "35061", + "35086", + "35089", + "35092", + "35095", + "35106", + "35113", + "35128", + "35132", + "35142", + "35146", + "35147", + "35159", + "35161", + "35167", + "35174", + "35184", + "35192", + "35196", + "35224", + "35227", + "35237", + "35241", + "35242", + "35256", + "35264", + "35270", + "35274", + "35279", + "35282", + "35296", + "35297", + "35302", + "35306", + "35308", + "35312", + "35313", + "35317", + "35318", + "35326", + "35334", + "35341", + "35352", + "35353", + "35355", + "35356", + "35360", + "35362", + "35375", + "35379", + "35382", + "35385", + "35400", + "35408", + "35415", + "35428", + "35431", + "35432", + "35451", + "35454", + "35455", + "35458", + "35466", + "35467", + "35479", + "35481", + "35484", + "35487", + "35490", + "35492", + "35499", + "35501", + "35510", + "35514", + "35522", + "35526", + "35529", + "35530", + "35536", + "35540", + "35542", + "35549", + "35555", + "35559", + "35561", + "35563", + "35564", + "35565", + "35566", + "35575", + "35577", + "35580", + "35585", + "35587", + "35589", + "35591", + "35595", + "35610", + "35617", + "35622", + "35636", + "35640", + "35650", + "35653", + "35658", + "35660", + "35661", + "35669", + "35673", + "35674", + "35676", + "35682", + "35683", + "35686", + "35687", + "35689", + "35691", + "35692", + "35693", + "35697", + "35701", + "35705", + "35711", + "35713", + "35728", + "35735", + "35738", + "35739", + "35746", + "35750", + "35754", + "35757", + "35780", + "35784", + "35813", + "35822", + "35827", + "35828", + "35829", + "35831", + "35833", + "35841", + "35853", + "35854", + "35861", + "35862", + "35864", + "35866", + "35869", + "35871", + "35883", + "35888", + "35890", + "35892", + "35894", + "35895", + "35897", + "35898", + "35899", + "35903", + "35908", + "35910", + "35915", + "35922", + "35939", + "35950", + "35965", + "35968", + "35990", + "35992", + "35993", + "36018", + "36021", + "36035", + "36036", + "36043", + "36046", + "36050", + "36051", + "36056", + "36088", + "36090", + "36096", + "36101", + "36104", + "36119", + "36125", + "36127", + "36136", + "36145", + "36148", + "36150", + "36155", + "36169", + "36184", + "36195", + "36198", + "36203", + "36204", + "36214", + "36219", + "36224", + "36226", + "36258", + "36260", + "36265", + "36267", + "36270", + "36274", + "36279", + "36282", + "36286", + "36289", + "36303", + "36304", + "36312", + "36321", + "36323", + "36326", + "36329", + "36335", + "36352", + "36353", + "36362", + "36367", + "36382", + "36400", + "36405", + "36410", + "36415", + "36424", + "36425", + "36427", + "36446", + "36449", + "36453", + "36456", + "36457", + "36458", + "36468", + "36472", + "36473", + "36476", + "36486", + "36490", + "36498", + "36500", + "36505", + "36507", + "36511", + "36522", + "36529", + "36532", + "36533", + "36562", + "36564", + "36566", + "36573", + "36574", + "36575", + "36586", + "36588", + "36598", + "36605", + "36607", + "36610", + "36612", + "36613", + "36614", + "36616", + "36619", + "36625", + "36629", + "36660", + "36661", + "36669", + "36670", + "36676", + "36679", + "36695", + "36698", + "36699", + "36702", + "36710", + "36712", + "36718", + "36719", + "36728", + "36729", + "36747", + "36750", + "36753", + "36754", + "36755", + "36770", + "36773", + "36776", + "36780", + "36785", + "36788", + "36791", + "36797", + "36803", + "36812", + "36818", + "36833", + "36849", + "36862", + "36865", + "36866", + "36870", + "36888", + "36899", + "36900", + "36901", + "36905", + "36907", + "36912", + "36924", + "36931", + "36942", + "36948", + "36956", + "36958", + "36971", + "36984", + "36986", + "36994", + "36995", + "36997", + "36998", + "37005", + "37007", + "37010", + "37015", + "37017", + "37018", + "37028", + "37035", + "37046", + "37054", + "37055", + "37056", + "37067", + "37071", + "37077", + "37087", + "37090", + "37092", + "37096", + "37102", + "37107", + "37113", + "37120", + "37140", + "37144", + "37145", + "37172", + "37182", + "37187", + "37188", + "37194", + "37199", + "37200", + "37207", + "37225", + "37241", + "37242", + "37249", + "37258", + "37259", + "37265", + "37267", + "37272", + "37277", + "37279", + "37280", + "37293", + "37304", + "37310", + "37313", + "37315", + "37319", + "37322", + "37323", + "37327", + "37333", + "37335", + "37339", + "37341", + "37344", + "37349", + "37351", + "37355", + "37361", + "37363", + "37385", + "37406", + "37411", + "37414", + "37417", + "37423", + "37427", + "37428", + "37435", + "37436", + "37439", + "37440", + "37441", + "37442", + "37453", + "37457", + "37471", + "37475", + "37476", + "37477", + "37497", + "37507", + "37517", + "37519", + "37524", + "37527", + "37530", + "37533", + "37534", + "37539", + "37540", + "37541", + "37545", + "37546", + "37550", + "37568", + "37570", + "37571", + "37575", + "37581", + "37585", + "37588", + "37610", + "37614", + "37615", + "37619", + "37626", + "37635", + "37636", + "37637", + "37638", + "37664", + "37666", + "37683", + "37686", + "37688", + "37698", + "37705", + "37711", + "37713", + "37716", + "37718", + "37721", + "37722", + "37737", + "37748", + "37750", + "37753", + "37759", + "37761", + "37762", + "37766", + "37767", + "37775", + "37782", + "37784", + "37786", + "37792", + "37795", + "37800", + "37804", + "37817", + "37820", + "37828", + "37837", + "37847", + "37853", + "37858", + "37859", + "37865", + "37876", + "37879", + "37883", + "37884", + "37887", + "37888", + "37894", + "37896", + "37900", + "37912", + "37917", + "37925", + "37926", + "37933", + "37935", + "37946", + "37959", + "37967", + "37980", + "37981", + "37983", + "37987", + "37997", + "38007", + "38009", + "38015", + "38027", + "38038", + "38042", + "38076", + "38084", + "38088", + "38093", + "38105", + "38107", + "38119", + "38124", + "38128", + "38129", + "38138", + "38140", + "38154", + "38165", + "38171", + "38172", + "38173", + "38176", + "38180", + "38189", + "38200", + "38207", + "38210", + "38213", + "38221", + "38222", + "38226", + "38239", + "38251", + "38270", + "38276", + "38282", + "38291", + "38297", + "38305", + "38308", + "38314", + "38318", + "38346", + "38372", + "38373", + "38380", + "38381", + "38382", + "38393", + "38394", + "38404", + "38406", + "38409", + "38410", + "38411", + "38413", + "38424", + "38425", + "38426", + "38428", + "38429", + "38431", + "38432", + "38454", + "38455", + "38456", + "38463", + "38466", + "38470", + "38471", + "38475", + "38476", + "38480", + "38482", + "38488", + "38491", + "38494", + "38495", + "38501", + "38506", + "38536", + "38541", + "38542", + "38548", + "38549", + "38553", + "38557", + "38562", + "38565", + "38573", + "38579", + "38585", + "38587", + "38600", + "38607", + "38625", + "38637", + "38646", + "38648", + "38657", + "38659", + "38664", + "38665", + "38675", + "38676", + "38680", + "38684", + "38693", + "38698", + "38699", + "38704", + "38706", + "38707", + "38710", + "38711", + "38716", + "38722", + "38727", + "38734", + "38741", + "38743", + "38745", + "38749", + "38757", + "38760", + "38781", + "38784", + "38786", + "38788", + "38789", + "38810", + "38824", + "38835", + "38838", + "38851", + "38852", + "38857", + "38867", + "38871", + "38875", + "38877", + "38884", + "38885", + "38888", + "38890", + "38893", + "38900", + "38911", + "38914", + "38922", + "38931", + "38937", + "38941", + "38942", + "38943", + "38945", + "38956", + "38961", + "38970", + "38974", + "38979", + "38987", + "38988", + "38994", + "39007", + "39021", + "39022", + "39029", + "39033", + "39036", + "39045", + "39048", + "39049", + "39052", + "39054", + "39056", + "39062", + "39065", + "39069", + "39072", + "39075", + "39077", + "39078", + "39081", + "39082", + "39090", + "39091", + "39092", + "39093", + "39094", + "39095", + "39097", + "39099", + "39100", + "39102", + "39107", + "39123", + "39129", + "39130", + "39131", + "39151", + "39153", + "39154", + "39158", + "39159", + "39165", + "39166", + "39175", + "39178", + "39180", + "39184", + "39202", + "39203", + "39205", + "39206", + "39208", + "39215", + "39223", + "39230", + "39236", + "39238", + "39239", + "39248", + "39275", + "39287", + "39291", + "39296", + "39301", + "39303", + "39305", + "39307", + "39320", + "39321", + "39323", + "39340", + "39341", + "39351", + "39368", + "39369", + "39373", + "39379", + "39385", + "39387", + "39404", + "39406", + "39410", + "39411", + "39419", + "39424", + "39425", + "39426", + "39427", + "39428", + "39431", + "39436", + "39439", + "39443", + "39455", + "39457", + "39468", + "39472", + "39474", + "39480", + "39497", + "39500", + "39511", + "39513", + "39516", + "39529", + "39535", + "39538", + "39554", + "39555", + "39556", + "39561", + "39566", + "39570", + "39573", + "39575", + "39608", + "39613", + "39614", + "39618", + "39619", + "39622", + "39626", + "39631", + "39638", + "39640", + "39641", + "39649", + "39653", + "39654", + "39658", + "39674", + "39676", + "39678", + "39697", + "39718", + "39723", + "39724", + "39729", + "39731", + "39736", + "39737", + "39740", + "39745", + "39747", + "39752", + "39756", + "39760", + "39761", + "39764", + "39765", + "39787", + "39789", + "39790", + "39791", + "39793", + "39794", + "39798", + "39801", + "39802", + "39805", + "39806", + "39815", + "39817", + "39822", + "39826", + "39830", + "39832", + "39850", + "39855", + "39870", + "39871", + "39878", + "39886", + "39887", + "39889", + "39890", + "39893", + "39912", + "39913", + "39921", + "39928", + "39944", + "39947", + "39955", + "39961", + "39964", + "39966", + "39969", + "39970", + "39973", + "39979", + "40014", + "40015", + "40022", + "40038", + "40041", + "40042", + "40053", + "40055", + "40056", + "40058", + "40060", + "40063", + "40068", + "40070", + "40091", + "40093", + "40096", + "40101", + "40117", + "40122", + "40127", + "40128", + "40131", + "40134", + "40138", + "40140", + "40143", + "40144", + "40164", + "40167", + "40169", + "40170", + "40177", + "40178", + "40180", + "40190", + "40193", + "40197", + "40200", + "40201", + "40202", + "40208", + "40213", + "40218", + "40224", + "40243", + "40247", + "40250", + "40252", + "40253", + "40263", + "40266", + "40268", + "40276", + "40277", + "40282", + "40294", + "40296", + "40299", + "40308", + "40321", + "40333", + "40348", + "40350", + "40353", + "40355", + "40358", + "40362", + "40367", + "40375", + "40377", + "40393", + "40394", + "40401", + "40408", + "40415", + "40416", + "40421", + "40424", + "40436", + "40442", + "40450", + "40457", + "40468", + "40470", + "40474", + "40478", + "40483", + "40498", + "40506", + "40525", + "40534", + "40535", + "40536", + "40539", + "40543", + "40548", + "40556", + "40561", + "40574", + "40575", + "40584", + "40587", + "40590", + "40592", + "40604", + "40607", + "40609", + "40619", + "40626", + "40651", + "40656", + "40660", + "40669", + "40674", + "40677", + "40686", + "40689", + "40691", + "40699", + "40702", + "40712", + "40715", + "40716", + "40723", + "40731", + "40757", + "40761", + "40773", + "40777", + "40782", + "40788", + "40795", + "40804", + "40818", + "40819", + "40821", + "40827", + "40828", + "40829", + "40837", + "40840", + "40841", + "40842", + "40845", + "40849", + "40850", + "40853", + "40864", + "40870", + "40874", + "40875", + "40881", + "40887", + "40889", + "40894", + "40897", + "40901", + "40906", + "40907", + "40918", + "40922", + "40924", + "40926", + "40931", + "40946", + "40952", + "40965", + "40968", + "40974", + "40975", + "40989", + "40995", + "40997", + "41003", + "41004", + "41005", + "41009", + "41012", + "41019", + "41020", + "41034", + "41037", + "41039", + "41044", + "41054", + "41064", + "41069", + "41072", + "41079", + "41083", + "41094", + "41096", + "41108", + "41122", + "41129", + "41132", + "41134", + "41156", + "41158", + "41160", + "41181", + "41193", + "41198", + "41202", + "41204", + "41210", + "41212", + "41214", + "41223", + "41226", + "41233", + "41261", + "41265", + "41270", + "41279", + "41285", + "41292", + "41293", + "41294", + "41299", + "41304", + "41313", + "41314", + "41322", + "41338", + "41345", + "41347", + "41349", + "41350", + "41352", + "41354", + "41355", + "41358", + "41359", + "41365", + "41377", + "41392", + "41398", + "41402", + "41405", + "41411", + "41412", + "41420", + "41422", + "41429", + "41434", + "41449", + "41452", + "41453", + "41456", + "41459", + "41460", + "41467", + "41470", + "41474", + "41480", + "41481", + "41483", + "41485", + "41490", + "41499", + "41500", + "41501", + "41506", + "41514", + "41516", + "41523", + "41528", + "41543", + "41547", + "41549", + "41555", + "41556", + "41558", + "41565", + "41572", + "41573", + "41576", + "41579", + "41581", + "41588", + "41605", + "41625", + "41627", + "41633", + "41637", + "41638", + "41643", + "41645", + "41650", + "41653", + "41665", + "41666", + "41667", + "41668", + "41670", + "41678", + "41685", + "41691", + "41693", + "41695", + "41696", + "41699", + "41717", + "41728", + "41729", + "41736", + "41748", + "41771", + "41775", + "41795", + "41797", + "41806", + "41811", + "41814", + "41826", + "41834", + "41838", + "41843", + "41848", + "41849", + "41852", + "41858", + "41860", + "41872", + "41874", + "41876", + "41882", + "41888", + "41895", + "41899", + "41900", + "41908", + "41912", + "41917", + "41920", + "41922", + "41931", + "41942", + "41949", + "41950", + "41955", + "41960", + "41965", + "41972", + "41976", + "41982", + "41989", + "42000", + "42009", + "42012", + "42014", + "42016", + "42022", + "42026", + "42028", + "42047", + "42052", + "42069", + "42070", + "42071", + "42077", + "42078", + "42081", + "42087", + "42089", + "42091", + "42118", + "42122", + "42126", + "42130", + "42138", + "42144", + "42147", + "42153", + "42164", + "42166", + "42168", + "42169", + "42179", + "42181", + "42187", + "42193", + "42200", + "42205", + "42211", + "42212", + "42215", + "42217", + "42231", + "42236", + "42244", + "42256", + "42265", + "42275", + "42281", + "42288", + "42294", + "42297", + "42304", + "42309", + "42310", + "42311", + "42312", + "42313", + "42318", + "42325", + "42332", + "42335", + "42338", + "42342", + "42345", + "42346", + "42355", + "42363", + "42366", + "42368", + "42369", + "42371", + "42372", + "42385", + "42387", + "42418", + "42419", + "42423", + "42425", + "42428", + "42434", + "42440", + "42444", + "42448", + "42454", + "42458", + "42465", + "42472", + "42475", + "42477", + "42486", + "42488", + "42495", + "42499", + "42512", + "42513", + "42514", + "42515", + "42523", + "42526", + "42527", + "42531", + "42534", + "42540", + "42542", + "42549", + "42550", + "42555", + "42561", + "42569", + "42580", + "42582", + "42588", + "42592", + "42598", + "42600", + "42615", + "42617", + "42626", + "42636", + "42648", + "42666", + "42681", + "42686", + "42706", + "42710", + "42719", + "42720", + "42723", + "42736", + "42747", + "42750", + "42757", + "42758", + "42759", + "42774", + "42777", + "42779", + "42782", + "42792", + "42793", + "42816", + "42823", + "42833", + "42873", + "42884", + "42888", + "42893", + "42898", + "42905", + "42906", + "42909", + "42910", + "42912", + "42920", + "42921", + "42922", + "42926", + "42928", + "42933", + "42938", + "42947", + "42948", + "42952", + "42955", + "42987", + "43000", + "43010", + "43016", + "43028", + "43031", + "43052", + "43054", + "43055", + "43060", + "43066", + "43067", + "43074", + "43078", + "43079", + "43088", + "43091", + "43099", + "43101", + "43107", + "43108", + "43112", + "43114", + "43126", + "43136", + "43147", + "43169", + "43170", + "43182", + "43189", + "43202", + "43204", + "43212", + "43217", + "43228", + "43233", + "43235", + "43240", + "43243", + "43262", + "43264", + "43265", + "43272", + "43279", + "43288", + "43289", + "43291", + "43309", + "43311", + "43324", + "43331", + "43335", + "43338", + "43350", + "43357", + "43364", + "43372", + "43380", + "43381", + "43382", + "43385", + "43392", + "43393", + "43395", + "43399", + "43400", + "43401", + "43402", + "43412", + "43427", + "43428", + "43432", + "43443", + "43446", + "43450", + "43454", + "43457", + "43462", + "43467", + "43469", + "43470", + "43486", + "43488", + "43491", + "43494", + "43500", + "43505", + "43521", + "43522", + "43523", + "43527", + "43532", + "43538", + "43562", + "43564", + "43565", + "43571", + "43574", + "43581", + "43582", + "43588", + "43591", + "43592", + "43597", + "43601", + "43602", + "43604", + "43606", + "43607", + "43612", + "43628", + "43634", + "43644", + "43653", + "43654", + "43667", + "43676", + "43688", + "43689", + "43695", + "43710", + "43711", + "43713", + "43716", + "43717", + "43723", + "43733", + "43742", + "43751", + "43760", + "43771", + "43778", + "43783", + "43791", + "43798", + "43802", + "43805", + "43806", + "43819", + "43821", + "43825", + "43833", + "43837", + "43839", + "43854", + "43856", + "43859", + "43862", + "43864", + "43866", + "43870", + "43872", + "43874", + "43879", + "43887", + "43890", + "43897", + "43900", + "43908", + "43911", + "43915", + "43920", + "43928", + "43934", + "43938", + "43943", + "43946", + "43949", + "43955", + "43956", + "43960", + "43974", + "43982", + "43999", + "44007", + "44022", + "44026", + "44040", + "44042", + "44044", + "44045", + "44053", + "44054", + "44056", + "44057", + "44060", + "44061", + "44066", + "44078", + "44079", + "44084", + "44087", + "44096", + "44100", + "44102", + "44114", + "44130", + "44134", + "44135", + "44156", + "44163", + "44169", + "44172", + "44174", + "44187", + "44192", + "44200", + "44201", + "44202", + "44203", + "44216", + "44217", + "44220", + "44223", + "44224", + "44227", + "44230", + "44238", + "44242", + "44243", + "44244", + "44247", + "44255", + "44268", + "44269", + "44275", + "44278", + "44279", + "44281", + "44285", + "44286", + "44289", + "44294", + "44301", + "44307", + "44318", + "44319", + "44320", + "44334", + "44338", + "44339", + "44342", + "44350", + "44353", + "44354", + "44356", + "44362", + "44366", + "44367", + "44373", + "44374", + "44377", + "44390", + "44394", + "44400", + "44402", + "44405", + "44410", + "44415", + "44427", + "44429", + "44435", + "44441", + "44446", + "44458", + "44465", + "44467", + "44469", + "44471", + "44473", + "44480", + "44483", + "44496", + "44498", + "44508", + "44510", + "44515", + "44523", + "44524", + "44536", + "44555", + "44556", + "44559", + "44560", + "44561", + "44562", + "44569", + "44570", + "44574", + "44580", + "44587", + "44603", + "44608", + "44613", + "44617", + "44619", + "44624", + "44625", + "44629", + "44636", + "44638", + "44640", + "44641", + "44648", + "44654", + "44656", + "44663", + "44673", + "44691", + "44705", + "44708", + "44717", + "44748", + "44761", + "44762", + "44770", + "44772", + "44775", + "44778", + "44780", + "44784", + "44786", + "44787", + "44803", + "44811", + "44818", + "44829", + "44831", + "44833", + "44837", + "44849", + "44851", + "44852", + "44857", + "44858", + "44859", + "44861", + "44862", + "44870", + "44875", + "44882", + "44887", + "44893", + "44897", + "44898", + "44905", + "44909", + "44915", + "44916", + "44917", + "44918", + "44934", + "44936", + "44937", + "44938", + "44940", + "44949", + "44953", + "44959", + "44964", + "44972", + "44973", + "44974", + "44978", + "44984", + "44992", + "44995", + "44997", + "45020", + "45024", + "45028", + "45031", + "45048", + "45051", + "45068", + "45071", + "45076", + "45077", + "45079", + "45080", + "45087", + "45088", + "45099", + "45102", + "45104", + "45116", + "45122", + "45128", + "45136", + "45145", + "45150", + "45151", + "45158", + "45168", + "45170", + "45173", + "45179", + "45182", + "45183", + "45184", + "45185", + "45189", + "45207", + "45208", + "45210", + "45220", + "45231", + "45261", + "45264", + "45266", + "45269", + "45271", + "45289", + "45291", + "45295", + "45296", + "45309", + "45315", + "45316", + "45329", + "45345", + "45347", + "45350", + "45353", + "45364", + "45365", + "45366", + "45367", + "45370", + "45377", + "45378", + "45381", + "45388", + "45390", + "45398", + "45409", + "45412", + "45415", + "45425", + "45430", + "45446", + "45453", + "45455", + "45463", + "45475", + "45478", + "45490", + "45497", + "45499", + "45500", + "45503", + "45514", + "45523", + "45532", + "45537", + "45539", + "45540", + "45541", + "45542", + "45551", + "45563", + "45566", + "45570", + "45577", + "45582", + "45586", + "45605", + "45611", + "45614", + "45619", + "45625", + "45628", + "45630", + "45632", + "45635", + "45637", + "45638", + "45639", + "45644", + "45648", + "45649", + "45661", + "45667", + "45668", + "45671", + "45675", + "45691", + "45695", + "45703", + "45705", + "45707", + "45708", + "45715", + "45718", + "45719", + "45726", + "45729", + "45730", + "45731", + "45736", + "45741", + "45747", + "45755", + "45759", + "45761", + "45768", + "45769", + "45770", + "45771", + "45777", + "45781", + "45786", + "45802", + "45810", + "45813", + "45818", + "45821", + "45833", + "45835", + "45846", + "45848", + "45853", + "45871", + "45888", + "45890", + "45896", + "45897", + "45905", + "45909", + "45911", + "45915", + "45917", + "45919", + "45923", + "45925", + "45928", + "45930", + "45944", + "45950", + "45958", + "45959", + "45966", + "45967", + "45972", + "45976", + "45984", + "45987", + "45988", + "45992", + "45995", + "45997", + "46006", + "46009", + "46011", + "46019", + "46020", + "46022", + "46024", + "46030", + "46038", + "46042", + "46055", + "46058", + "46063", + "46067", + "46070", + "46071", + "46073", + "46078", + "46081", + "46089", + "46090", + "46092", + "46101", + "46105", + "46113", + "46118", + "46124", + "46131", + "46133", + "46139", + "46142", + "46144", + "46147", + "46158", + "46159", + "46161", + "46162", + "46164", + "46167", + "46179", + "46181", + "46182", + "46187", + "46214", + "46216", + "46218", + "46220", + "46232", + "46233", + "46246", + "46247", + "46248", + "46249", + "46251", + "46256", + "46264", + "46268", + "46279", + "46286", + "46292", + "46299", + "46301", + "46302", + "46311", + "46316", + "46325", + "46327", + "46333", + "46338", + "46342", + "46344", + "46351", + "46366", + "46369", + "46378", + "46380", + "46381", + "46382", + "46383", + "46388", + "46395", + "46408", + "46415", + "46417", + "46421", + "46422", + "46426", + "49162", + "49168", + "49169", + "49170", + "49178", + "49185", + "49186", + "49191", + "49194", + "49196", + "49198", + "49210", + "49218", + "49219", + "49223", + "49228", + "49239", + "49243", + "49249", + "49260", + "49267", + "49272", + "49278", + "49286", + "49297", + "49305", + "49306", + "49308", + "49319", + "49323", + "49327", + "49333", + "49341", + "49343", + "49344", + "49347", + "49356", + "49367", + "49369", + "49371", + "49396", + "49399", + "49401", + "49404", + "49405", + "49413", + "49416", + "49422", + "49426", + "49431", + "49434", + "49444", + "49445", + "49453", + "49459", + "49465", + "49468", + "49469", + "49480", + "49482", + "49491", + "49493", + "49503", + "49504", + "49506", + "49509", + "49511", + "49522", + "49525", + "49533", + "49538", + "49543", + "49561", + "49572", + "49576", + "49577", + "49579", + "49580", + "49585", + "49587", + "49593", + "49599", + "49609", + "49613", + "49618", + "49622", + "49636", + "49637", + "49645", + "49657", + "49683", + "49685", + "49695", + "49703", + "49708", + "49709", + "49720", + "49733", + "49737", + "49748", + "49754", + "49755", + "49761", + "49775", + "49776", + "49783", + "49798", + "49801", + "49808", + "49812", + "49815", + "49828", + "49833", + "49840", + "49841", + "49844", + "49849", + "49857", + "49861", + "49864", + "49866", + "49876", + "49890", + "49904", + "49914", + "49922", + "49931", + "49947", + "49951", + "49953", + "49964", + "49965", + "49972", + "49973", + "49978", + "49986", + "49996", + "50002", + "50007", + "50013", + "50017", + "50018", + "50034", + "50035", + "50037", + "50054", + "50063", + "50080", + "50081", + "50084", + "50098", + "50105", + "50107", + "50109", + "50110", + "50121", + "50123", + "50127", + "50138", + "50145", + "50147", + "50148", + "50154", + "50155", + "50160", + "50162", + "50166", + "50173", + "50181", + "50187", + "50188", + "50203", + "50213", + "50220", + "50229", + "50241", + "50247", + "50254", + "50268", + "50276", + "50289", + "50292", + "50299", + "50314", + "50320", + "50325", + "50346", + "50352", + "50353", + "50361", + "50368", + "50369", + "50372", + "50374", + "50378", + "50407", + "50408", + "50410", + "50418", + "50420", + "50425", + "50426", + "50432", + "50435", + "50440", + "50450", + "50451", + "50455", + "50463", + "50468", + "50472", + "50475", + "50482", + "50488", + "50497", + "50501", + "50503", + "50504", + "50519", + "50521", + "50528", + "50537", + "50540", + "50542", + "50545", + "50554", + "50559", + "50564", + "50566", + "50571", + "50575", + "50579", + "50590", + "50599", + "50603", + "50620", + "50624", + "50626", + "50637", + "50639", + "50640", + "50645", + "50649", + "50651", + "50663", + "50669", + "50687", + "50692", + "50695", + "50703", + "50712", + "50721", + "50724", + "50734", + "50743", + "50744", + "50762", + "50764", + "50767", + "50769", + "50773", + "50775", + "50776", + "50780", + "50792", + "50794", + "50803", + "50808", + "50810", + "50814", + "50817", + "50819", + "50824", + "50828", + "50832", + "50834", + "50852", + "50861", + "50867", + "50873", + "50875", + "50882", + "50899", + "50904", + "50909", + "50913", + "50921", + "50925", + "50927", + "50930", + "50936", + "50942", + "50944", + "50947", + "50952", + "50953", + "50961", + "50962", + "50975", + "50978", + "50981", + "50987", + "50994", + "51004", + "51008", + "51010", + "51011", + "51022", + "51024", + "51028", + "51032", + "51033", + "51034", + "51040", + "51041", + "51048", + "51050", + "51054", + "51070", + "51071", + "51078", + "51086", + "51087", + "51093", + "51094", + "51097", + "51110", + "51112", + "51114", + "51116", + "51117", + "51121", + "51122", + "51124", + "51132", + "51136", + "51138", + "51149", + "51156", + "51179", + "51198", + "51201", + "51202", + "51204", + "51210", + "51213", + "51217", + "51218", + "51220", + "51222", + "51228", + "51229", + "51241", + "51252", + "51261", + "51263", + "51268", + "51291", + "51292", + "51301", + "51311", + "51314", + "51316", + "51327", + "51348", + "51363", + "51371", + "51372", + "51378", + "51379", + "51384", + "51388", + "51389", + "51391", + "51400", + "51402", + "51411", + "51424", + "51425", + "51426", + "51429", + "51430", + "51435", + "51438", + "51447", + "51453", + "51459", + "51464", + "51465", + "51469", + "51476", + "51478", + "51481", + "51487", + "51493", + "51494", + "51497", + "51501", + "51503", + "51508", + "51513", + "51520", + "51523", + "51529", + "51533", + "51535", + "51537", + "51538", + "51547", + "51554", + "51559", + "51567", + "51586", + "51588", + "51589", + "51598", + "51605", + "51611", + "51616", + "51621", + "51626", + "51628", + "51634", + "51641", + "51648", + "51649", + "51671", + "51681", + "51688", + "51692", + "51700", + "51702", + "51713", + "51719", + "51723", + "51729", + "51732", + "51733", + "51748", + "51751", + "51755", + "51764", + "51769", + "51772", + "51773", + "51777", + "51778", + "51780", + "51789", + "51792", + "51803", + "51806", + "51817", + "51825", + "51833", + "51835", + "51836", + "51841", + "51847", + "51849", + "51852", + "51855", + "51856", + "51859", + "51861", + "51863", + "51864", + "51872", + "51877", + "51881", + "51887", + "51892", + "51897", + "51904", + "51906", + "51908", + "51912", + "51917", + "51926", + "51928", + "51929", + "51948", + "51951", + "51964", + "51971", + "51972", + "51973", + "51974", + "51975", + "51990", + "51992", + "51996", + "52000", + "52013", + "52021", + "52026", + "52030", + "52036", + "52039", + "52058", + "52060", + "52064", + "52070", + "52081", + "52082", + "52089", + "52092", + "52097", + "52104", + "52106", + "52116", + "52121", + "52122", + "52127", + "52133", + "52134", + "52140", + "52148", + "52152", + "52156", + "52161", + "52162", + "52167", + "52169", + "52173", + "52192", + "52193", + "52196", + "52209", + "52218", + "52228", + "52249", + "52253", + "52260", + "52261", + "52267", + "52269", + "52271", + "52272", + "52273", + "52288", + "52290", + "52301", + "52305", + "52306", + "52313", + "52315", + "52319", + "52322", + "52330", + "52342", + "52346", + "52351", + "52354", + "52363", + "52382", + "52386", + "52390", + "52392", + "52409", + "52427", + "52428", + "52436", + "52459", + "52462", + "52465", + "52485", + "52488", + "52500", + "52502", + "52506", + "52511", + "52516", + "52518", + "52520", + "52524", + "52525", + "52530", + "52548", + "52554", + "52555", + "52563", + "52572", + "52578", + "52584", + "52586", + "52587", + "52589", + "52591", + "52593", + "52609", + "52615", + "52617", + "52623", + "52628", + "52629", + "52631", + "52640", + "52648", + "52649", + "52651", + "52658", + "52670", + "52673", + "52676", + "52681", + "52686", + "52690", + "52698", + "52699", + "52710", + "52712", + "52729", + "52734", + "52742", + "52753", + "52755", + "52763", + "52770", + "52779", + "52781", + "52790", + "52793", + "52802", + "52804", + "52808", + "52817", + "52821", + "52834", + "52835", + "52837", + "52857", + "52858", + "52860", + "52863", + "52872", + "52873", + "52874", + "52878", + "52880", + "52890", + "52893", + "52907", + "52908", + "52911", + "52914", + "52925", + "52930", + "52931", + "52932", + "52936", + "52945", + "52961", + "52966", + "52967", + "52974", + "52976", + "52978", + "52981", + "52983", + "53002", + "53010", + "53022", + "53025", + "53028", + "53029", + "53030", + "53034", + "53039", + "53041", + "53042", + "53059", + "53066", + "53078", + "53081", + "53086", + "53087", + "53089", + "53093", + "53097", + "53099", + "53104", + "53114", + "53115", + "53116", + "53119", + "53121", + "53140", + "53145", + "53162", + "53172", + "53175", + "53180", + "53188", + "53190", + "53202", + "53203", + "53211", + "53212", + "53214", + "53221", + "53223", + "53233", + "53238", + "53239", + "53240", + "53242", + "53251", + "53252", + "53254", + "53255", + "53274", + "53290", + "53292", + "53294", + "53298", + "53301", + "53307", + "53313", + "53323", + "53334", + "53343", + "53367", + "53376", + "53382", + "53383", + "53392", + "53397", + "53405", + "53406", + "53408", + "53418", + "53419", + "53422", + "53423", + "53426", + "53428", + "53430", + "53432", + "53436", + "53443", + "53446", + "53451", + "53463", + "53464", + "53466", + "53469", + "53472", + "53474", + "53477", + "53492", + "53494", + "53497", + "53500", + "53509", + "53510", + "53515", + "53518", + "53535", + "53540", + "53550", + "53554", + "53569", + "53575", + "53582", + "53588", + "53609", + "53615", + "53617", + "53624", + "53629", + "53642", + "53647", + "53648", + "53654", + "53656", + "53657", + "53658", + "53659", + "53663", + "53673", + "53678", + "53680", + "53682", + "53686", + "53701", + "53703", + "53706", + "53711", + "53712", + "53729", + "53731", + "53734", + "53750", + "53763", + "53772", + "53777", + "53781", + "53786", + "53791", + "53796", + "53798", + "53803", + "53818", + "53823", + "53830", + "53832", + "53845", + "53847", + "53852", + "53858", + "53861", + "53867", + "53870", + "53879", + "53881", + "53884", + "53889", + "53895", + "53904", + "53918", + "53921", + "53925", + "53928", + "53930", + "53932", + "53933", + "53950", + "53955", + "53962", + "53963", + "53969", + "53972", + "53986", + "53992", + "53996", + "54024", + "54027", + "54029", + "54030", + "54032", + "54033", + "54035", + "54044", + "54047", + "54048", + "54049", + "54066", + "54067", + "54068", + "54072", + "54076", + "54078", + "54082", + "54086", + "54095", + "54109", + "54127", + "54132", + "54140", + "54141", + "54145", + "54148", + "54149", + "54155", + "54165", + "54187", + "54192", + "54194", + "54204", + "54213", + "54218", + "54225", + "54232", + "54251", + "54255", + "54259", + "54262", + "54270", + "54276", + "54279", + "54282", + "54285", + "54287", + "54293", + "54298", + "54301", + "54303", + "54304", + "54308", + "54312", + "54319", + "54334", + "54345", + "54348", + "54353", + "54354", + "54357", + "54361", + "54368", + "54374", + "54379", + "54383", + "54385", + "54392", + "54396", + "54397", + "54453", + "54462", + "54463", + "54467", + "54472", + "54481", + "54493", + "54495", + "54497", + "54499", + "54506", + "54511", + "54515", + "54523", + "54531", + "54532", + "54534", + "54535", + "54547", + "54549", + "54554", + "54565", + "54567", + "54580", + "54584", + "54585", + "54586", + "54599", + "54600", + "54601", + "54602", + "54607", + "54610", + "54615", + "54621", + "54628", + "54631", + "54636", + "54637", + "54640", + "54644", + "54645", + "54652", + "54655", + "54661", + "54669", + "54672", + "54676", + "54680", + "54689", + "54696", + "54700", + "54714", + "54716", + "54719", + "54721", + "54724", + "54729", + "54754", + "54756", + "54757", + "54762", + "54767", + "54769", + "54775", + "54776", + "54780", + "54787", + "54804", + "54812", + "54816", + "54837", + "54838", + "54842", + "54846", + "54847", + "54852", + "54863", + "54865", + "54869", + "54877", + "54888", + "54889", + "54891", + "54902", + "54905", + "54930", + "54931", + "54933", + "54939", + "54940", + "54948", + "54963", + "54964", + "54965", + "54967", + "54979", + "55003", + "55012", + "55016", + "55019", + "55022", + "55023", + "55024", + "55026", + "55038", + "55041", + "55043", + "55079", + "55096", + "55109", + "55116", + "55122", + "55123", + "55128", + "55134", + "55142", + "55145", + "55146", + "55147", + "55152", + "55165", + "55166", + "55182", + "55189", + "55190", + "55194", + "55200", + "55213", + "55222", + "55235", + "55250", + "55253", + "55254", + "55256", + "55261", + "55267", + "55269", + "55271", + "55278", + "55279", + "55281", + "55283", + "55296", + "55309", + "55310", + "55312", + "55315", + "55317", + "55329", + "55340", + "55346", + "55351", + "55352", + "55357", + "55364", + "55366", + "55371", + "55378", + "55379", + "55386", + "55391", + "55395", + "55397", + "55414", + "55419", + "55423", + "55437", + "55439", + "55443", + "55457", + "55465", + "55467", + "55470", + "55476", + "55480", + "55482", + "55503", + "55504", + "55514", + "55515", + "55523", + "55526", + "55537", + "55541", + "55544", + "55551", + "55565", + "55590", + "55592", + "55595", + "55627", + "55635", + "55638", + "55640", + "55642", + "55643", + "55644", + "55656", + "55661", + "55662", + "55668", + "55669", + "55672", + "55675", + "55689", + "55692", + "55715", + "55719", + "55720", + "55723", + "55725", + "55726", + "55728", + "55730", + "55733", + "55736", + "55737", + "55740", + "55751", + "55753", + "55759", + "55762", + "55767", + "55776", + "55785", + "55786", + "55805", + "55806", + "55807", + "55808", + "55822", + "55823", + "55824", + "55832", + "55852", + "55858", + "55860", + "55864", + "55869", + "55871", + "55873", + "55883", + "55884", + "55893", + "55895", + "55905", + "55912", + "55914", + "55923", + "55931", + "55932", + "55938", + "55940", + "55941", + "55942", + "55950", + "55955", + "55963", + "55973", + "55987", + "55991", + "56000", + "56002", + "56004", + "56009", + "56010", + "56013", + "56032", + "56035", + "56037", + "56038", + "56040", + "56057", + "56063", + "56064", + "56066", + "56067", + "56073", + "56074", + "56076", + "56086", + "56088", + "56094", + "56097", + "56110", + "56113", + "56114", + "56123", + "56124", + "56125", + "56142", + "56150", + "56161", + "56174", + "56178", + "56188", + "56191", + "56196", + "56198", + "56203", + "56204", + "56222", + "56227", + "56231", + "56233", + "56234", + "56239", + "56243", + "56244", + "56251", + "56262", + "56269", + "56273", + "56275", + "56276", + "56277", + "56279", + "56280", + "56281", + "56289", + "56301", + "56302", + "56304", + "56310", + "56320", + "56323", + "56333", + "56335", + "56338", + "56342", + "56348", + "56355", + "56357", + "56359", + "56360", + "56362", + "56363", + "56365", + "56376", + "56381", + "56383", + "56385", + "56395", + "56401", + "56405", + "56419", + "56421", + "56425", + "56426", + "56429", + "56433", + "56446", + "56449", + "56461", + "56464", + "56469", + "56474", + "56482", + "56484", + "56488", + "56494", + "56503", + "56504", + "56509", + "56510", + "56512", + "56515", + "56518", + "56520", + "56534", + "56536", + "56537", + "56539", + "56545", + "56546", + "56553", + "56555", + "56567", + "56577", + "56579", + "56589", + "56590", + "56594", + "56608", + "56612", + "56615", + "56630", + "56637", + "56644", + "56645", + "56650", + "56660", + "56670", + "56674", + "56682", + "56685", + "56686", + "56691", + "56692", + "56705", + "56708", + "56711", + "56712", + "56720", + "56724", + "56731", + "56739", + "56741", + "56751", + "56753", + "56766", + "56771", + "56778", + "56781", + "56788", + "56795", + "56796", + "56803", + "56807", + "56814", + "56816", + "56825", + "56836", + "56840", + "56845", + "56877", + "56878", + "56888", + "56890", + "56896", + "56901", + "56903", + "56906", + "56916", + "56921", + "56930", + "56937", + "56940", + "56944", + "56945", + "56949", + "56960", + "56962", + "56969", + "56970", + "56975", + "56976", + "56983", + "56986", + "56991", + "57001", + "57010", + "57016", + "57018", + "57029", + "57036", + "57039", + "57053", + "57058", + "57060", + "57065", + "57067", + "57069", + "57070", + "57073", + "57074", + "57081", + "57085", + "57097", + "57104", + "57123", + "57137", + "57145", + "57146", + "57148", + "57151", + "57166", + "57175", + "57176", + "57180", + "57183", + "57193", + "57198", + "57199", + "57201", + "57206", + "57216", + "57221", + "57223", + "57224", + "57229", + "57233", + "57237", + "57247", + "57253", + "57260", + "57263", + "57277", + "57281", + "57283", + "57288", + "57296", + "57302", + "57313", + "57315", + "57317", + "57322", + "57323", + "57328", + "57329", + "57350", + "57353", + "57358", + "57360", + "57361", + "57362", + "57366", + "57383", + "57392", + "57404", + "57419", + "57420", + "57433", + "57434", + "57435", + "57438", + "57444", + "57456", + "57468", + "57474", + "57480", + "57485", + "57489", + "57500", + "57510", + "57512", + "57532", + "57537", + "57550", + "57559", + "57560", + "57567", + "57572", + "57574", + "57575", + "57579", + "57583", + "57585", + "57586", + "57588", + "57592", + "57602", + "57604", + "57607", + "57612", + "57622", + "57623", + "57626", + "57636", + "57639", + "57640", + "57648", + "57658", + "57660", + "57670", + "57673", + "57674", + "57688", + "57689", + "57692", + "57702", + "57703", + "57707", + "57713", + "57718", + "57729", + "57733", + "57736", + "57744", + "57746", + "57751", + "57752", + "57756", + "57766", + "57771", + "57773", + "57776", + "57791", + "57792", + "57794", + "57804", + "57806", + "57811", + "57814", + "57824", + "57827", + "57829", + "57830", + "57831", + "57838", + "57840", + "57841", + "57843", + "57846", + "57848", + "57863", + "57870", + "57871", + "57877", + "57880", + "57889", + "57895", + "57897", + "57906", + "57915", + "57920", + "57930", + "57933", + "57934", + "57937", + "57938", + "57942", + "57950", + "57952", + "57955", + "57961", + "57964", + "57966", + "57974", + "57979", + "57986", + "57989", + "57996", + "58000", + "58007", + "58008", + "58016", + "58028", + "58040", + "58041", + "58042", + "58059", + "58068", + "58069", + "58080", + "58082", + "58090", + "58097", + "58101", + "58114", + "58116", + "58117", + "58119", + "58124", + "58130", + "58132", + "58137", + "58147", + "58155", + "58158", + "58159", + "58160", + "58165", + "58172", + "58178", + "58179", + "58181", + "58182", + "58187", + "58190", + "58216", + "58227", + "58229", + "58237", + "58248", + "58254", + "58259", + "58275", + "58282", + "58294", + "58297", + "58302", + "58311", + "58316", + "58318", + "58319", + "58321", + "58327", + "58356", + "58369", + "58381", + "58394", + "58395", + "58398", + "58403", + "58404", + "58421", + "58430", + "58434", + "58435", + "58448", + "58453", + "58455", + "58466", + "58469", + "58478", + "58480", + "58486", + "58495", + "58497", + "58499", + "58503", + "58505", + "58507", + "58513", + "58522", + "58523", + "58524", + "58533", + "58535", + "58540", + "58543", + "58551", + "58552", + "58560", + "58586", + "58593", + "58601", + "58602", + "58603", + "58614", + "58618", + "58638", + "58640", + "58644", + "58646", + "58647", + "58654", + "58655", + "58656", + "58658", + "58676", + "58677", + "58678", + "58687", + "58690", + "58692", + "58694", + "58700", + "58706", + "58734", + "58735", + "58738", + "58740", + "58752", + "58761", + "58764", + "58772", + "58776", + "58787", + "58797", + "58815", + "58821", + "58824", + "58832", + "58835", + "58839", + "58840", + "58843", + "58846", + "58854", + "58858", + "58861", + "58865", + "58871", + "58872", + "58887", + "58890", + "58891", + "58908", + "58914", + "58919", + "58924", + "58928", + "58931", + "58939", + "58942", + "58952", + "58954", + "58961", + "58963", + "58965", + "58966", + "58967", + "58974", + "58986", + "59000", + "59003", + "59006", + "59007", + "59016", + "59036", + "59039", + "59046", + "59050", + "59051", + "59054", + "59055", + "59058", + "59059", + "59067", + "59069", + "59070", + "59071", + "59072", + "59074", + "59081", + "59082", + "59085", + "59086", + "59088", + "59092", + "59093", + "59096", + "59099", + "59101", + "59105", + "59113", + "59123", + "59124", + "59130", + "59133", + "59134", + "59135", + "59137", + "59139", + "59141", + "59142", + "59144", + "59147", + "59149", + "59151", + "59153", + "59162", + "59172", + "59179", + "59182", + "59184", + "59200", + "59203", + "59206", + "59213", + "59234", + "59238", + "59239", + "59241", + "59253", + "59257", + "59261", + "59263", + "59269", + "59283", + "59289", + "59291", + "59292", + "59298", + "59299", + "59304", + "59308", + "59310", + "59311", + "59318", + "59320", + "59323", + "59326", + "59327", + "59329", + "59332", + "59334", + "59337", + "59341", + "59342", + "59348", + "59351", + "59353", + "59368", + "59371", + "59386", + "59398", + "59415", + "59417", + "59419", + "59423", + "59443", + "59445", + "59450", + "59453", + "59456", + "59461", + "59465", + "59472", + "59479", + "59480", + "59481", + "59487", + "59501", + "59502", + "59513", + "59521", + "59523", + "59525", + "59537", + "59544", + "59556", + "59561", + "59562", + "59563", + "59567", + "59570", + "59574", + "59581", + "59588", + "59597", + "59600", + "59604", + "59606", + "59608", + "59615", + "59616", + "59633", + "59639", + "59640", + "59644", + "59645", + "59650", + "59654", + "59655", + "59657", + "59664", + "59666", + "59675", + "59676", + "59693", + "59695", + "59719", + "59727", + "59736", + "59747", + "59749", + "59751", + "59754", + "59757", + "59758", + "59766", + "59782", + "59785", + "59794", + "59795", + "59813", + "59821", + "59822", + "59823", + "59825", + "59834", + "59848", + "59858", + "59862", + "59879", + "59881", + "59886", + "59889", + "59892", + "59893", + "59897", + "59900", + "59901", + "59912", + "59922", + "59927", + "59932", + "59933", + "59941", + "59962", + "59966", + "59980", + "59997", + "59999", + "60010", + "60014", + "60020", + "60023", + "60039", + "60052", + "60067", + "60069", + "60075", + "60089", + "60102", + "60105", + "60107", + "60117", + "60119", + "60124", + "60128", + "60135", + "60148", + "60149", + "60154", + "60162", + "60164", + "60171", + "60175", + "60177", + "60183", + "60189", + "60195", + "60200", + "60209", + "60215", + "60218", + "60219", + "60226", + "60233", + "60241", + "60244", + "60245", + "60250", + "60251", + "60269", + "60270", + "60277", + "60280", + "60285", + "60286", + "60288", + "60289", + "60292", + "60301", + "60307", + "60313", + "60317", + "60318", + "60319", + "60322", + "60327", + "60329", + "60334", + "60351", + "60352", + "60355", + "60360", + "60369", + "60395", + "60396", + "60403", + "60407", + "60408", + "60418", + "60419", + "60421", + "60427", + "60428", + "60434", + "60436", + "60442", + "60443", + "60447", + "60456", + "60457", + "60461", + "60462", + "60471", + "60477", + "60479", + "60487", + "60492", + "60503", + "60507", + "60520", + "60529", + "60562", + "60566", + "60573", + "60576", + "60596", + "60604", + "60612", + "60619", + "60621", + "60629", + "60638", + "60651", + "60652", + "60653", + "60655", + "60662", + "60663", + "60667", + "60674", + "60680", + "60683", + "60687", + "60693", + "60696", + "60702", + "60705", + "60708", + "60714", + "60715", + "60726", + "60734", + "60744", + "60751", + "60753", + "60754", + "60757", + "60758", + "60771", + "60784", + "60789", + "60793", + "60802", + "60803", + "60814", + "60818", + "60828", + "60833", + "60837", + "60838", + "60841", + "60852", + "60858", + "60860", + "60864", + "60893", + "60895", + "60898", + "60910", + "60915", + "60919", + "60927", + "60930", + "60938", + "60939", + "60947", + "60950", + "60956", + "60957", + "60960", + "60967", + "60970", + "60972", + "60981", + "60985", + "60996", + "61005", + "61006", + "61008", + "61009", + "76940", + "77544", + "77646", + "77687", + "77845", + "78242", + "78262", + "78420", + "78693", + "79391", + "79432", + "79806", + "79902", + "79974", + "80186", + "80269", + "80294", + "80461", + "80496", + "80865", + "80941", + "80952", + "81038", + "81057", + "81174", + "81392", + "81544", + "81748", + "81939", + "82086", + "82194", + "82215", + "82391", + "82626", + "82763", + "82851", + "82877", + "82894", + "82965", + "83159", + "84447", + "84651", + "84657", + "84769", + "84781", + "84893", + "85046", + "85099", + "85105", + "85284", + "85285", + "85318", + "85457", + "85459", + "85645", + "85730", + "86116", + "86125", + "86243", + "86667", + "86991", + "87027", + "87381", + "87410", + "87424", + "87679", + "87820", + "87844", + "87873", + "87899", + "88232", + "88255", + "88268", + "88321", + "88395", + "88481", + "88566", + "89119", + "89418", + "89545", + "89700", + "89724", + "89760", + "90098", + "90328", + "90523", + "91139", + "91232", + "91457", + "91493", + "91545", + "91676", + "91752", + "91991", + "92215", + "92364", + "92517", + "92591", + "92772", + "92866", + "93049", + "93079", + "93203", + "93680", + "94170", + "94177", + "94351", + "94416", + "94436", + "94465", + "94664", + "95069", + "95673", + "95761", + "95926", + "95988", + "96001", + "96146", + "96307", + "96754", + "96972", + "96976", + "97021", + "97429", + "98083", + "98114", + "98252", + "98294", + "98398", + "98703", + "98784", + "99358", + "99418", + "99478", + "99932", + "99943" + ], + "seed": 42, + "val_ratio": 0.2, + "fusion_type": "gated", + "loss_type": "sce", + "split": "stratified_group" +} \ No newline at end of file diff --git a/DMS/dinov3_siglip2_lmf/README.md b/DMS/dinov3_siglip2_lmf/README.md new file mode 100644 index 0000000000000000000000000000000000000000..292c05e397e87ae9f0baf406e60094e253c1d25b --- /dev/null +++ b/DMS/dinov3_siglip2_lmf/README.md @@ -0,0 +1,52 @@ +# DINOv3-SigLIP2 + Low-rank Multimodal Fusion on Apple Dense Material Segmentation + +A material-classification **fusion head** from SegObjectMaterial. It classifies the +material of a masked object from two frozen embeddings: + +| | | +|---|---| +| vision | DINOv3 ViT-L/16 (CLS token, frozen) -> 1024-d | +| language | SigLIP2 base text encoder over Qwen3-VL-8B captions (frozen) -> 768-d | +| head | Low-rank Multimodal Fusion (`lmf`, rank=4, hidden_dim=256, modality_dropout=0.0), 1,922,365 parameters | +| classes | 57 (Apple Dense Material Segmentation) | + +**This repo holds only the head.** Features must come from the same encoders, +captioner and prompts as training (see the SegObjectMaterial repository); the +encoders are downloaded from their own model pages under their own licenses. + +## Evaluation + +Held-out split recorded in `split.json` (source images never seen in training). +Single training run -- differences under ~0.5 mIoU points between heads are within +run-to-run noise. + +| mIoU | mAcc | eval samples | +|---|---|---| +| 0.4407 | 0.6181 | 186,231 | + +## Training + +```json +{ + "learning_rate": 5e-05, + "epochs": 50, + "batch_size": 32, + "weight_decay": 0.0001, + "lr_schedule": "constant", + "early_stopping_patience": 0, + "checkpoint": "best validation loss" +} +``` + +## Use + +```python +from utils.hub import load_head_from_hub # SegObjectMaterial repository +head, info = load_head_from_hub("s0um0r0y/SegObjectMaterial", "DMS/dinov3_siglip2_lmf") +logits = head(vision_features, language_features) # [B, 1024], [B, 768] +``` + +## Integrity + +- `model.safetensors` sha256 `ee69c3ea4a8f7ecee29b767287987ec1c19082370b2dad48ae4d4b76f45b386a` +- source config `config/config_latest_models_lmf.toml`, code commit `1a8130c922267fb0786a33e3854a7e00763cc38f+dirty` diff --git a/DMS/dinov3_siglip2_lmf/config.toml b/DMS/dinov3_siglip2_lmf/config.toml new file mode 100644 index 0000000000000000000000000000000000000000..fa0d2aa6264bfb5ddc17801724422094cb3628ca --- /dev/null +++ b/DMS/dinov3_siglip2_lmf/config.toml @@ -0,0 +1,77 @@ +# LMF-head twin of config/config.toml. +# SAME embedding cache -- the head type does not change the cached features, so +# nothing needs re-serializing. Only the checkpoint, TensorBoard dir and W&B run +# differ, so this run can never overwrite the gated or mlp checkpoints. + +# Apple DMS -- LATEST-MODELS pipeline: DINOv3 ViT-L/16 (1024) + Qwen3-VL -> SigLIP2 text (768) +# +# Pair this with: +# src/vision_stream_latest_models.py + src/language_stream_latest_models.py +# run_serialization_latest_models.py -> train_latest_models.py +# +# For the base DINOv2/CLIP pipeline (run_serialization.py -> train.py) use +# config/config_dinov2_clip.toml instead -- its vision_dim is 768, not 1024. + +[data] +dataset_type = "apple_dms" +image_dir = "/images" +mask_dir = "/labels" +# Rebuilt automatically on first run; the index now stores one entry per +# CONNECTED COMPONENT, so any pre-existing labels.json must be removed first. +labels_file = "/labels_instances.json" +# Separate cache: DINOv3 features are 1024-d and must not mix with the +# 768-d DINOv2 cache written by run_serialization.py. +tensor_cache_dir = "/tensor_cache_dir_latest_models" + +# Connected-component filtering (measured on 400 real DMS masks): +# keeping every component gives 7.5x more samples than the old per-(image,class) +# scheme -- 2.45M samples / 47 GB / ~7.5x the VLM captioning time -- because 69% +# of components are under 0.1% of the frame and crop to a few pixels. +# A component is kept when area >= max(min_instance_area, min_instance_frac * frame). +min_instance_area = 1000 # absolute pixel floor +min_instance_frac = 0.001 # and at least 0.1% of the frame +max_instances_per_class = 0 # 0 = keep all; set e.g. 3 to cap the long tail + + +[model] +# fusion head: "lmf" = low-rank multimodal fusion (src/fusion_classifier.py, +# LowRankFusionHead). Read by train_latest_models.py; a contradicting --fusion +# flag is an error, so checkpoint_path can't hold the wrong head. +fusion = "lmf" +vision_dim = 1024 # DINOv3 ViT-L/16 CLS token +language_dim = 768 # SigLIP2 base text embedding +num_classes = 57 + +# LMF hyperparameters. rank 4 x hidden 256 = ~1.84M fusion parameters, close to +# the gated head (~1.97M), so gated-vs-lmf compares the fusion operator rather +# than model size. Both are read back from the checkpoint at load time, so +# evaluate/inference scripts need no extra flags. +lmf_rank = 4 +lmf_hidden = 256 +# Fraction of training samples with ONE stream zeroed (half vision, half +# language). 0.0 = plain LMF, as in the paper. Try 0.2 as a second run: it +# forces the head to work from either stream alone. +modality_dropout = 0.0 + +[training] +batch_size = 32 + +# Batch size for the OFFLINE SERIALIZATION pass, which is a completely different +# memory regime from training: it pushes full-resolution images through the 7B +# VLM, whereas [training].batch_size only moves cached 768-d vectors through a +# small MLP. Measured on the 23.6 GiB 4090 -- static weights 16.2 GiB, so only +# ~7.4 GiB is left: batch 8 peaks at 17.7 GiB, 16 at 19.2 GiB, and 32 OOMs. +# 8 leaves headroom for a labmate's job to coexist; raise to 16 on a free card. +serialization_batch_size = 8 +learning_rate = 5e-5 +epochs = 50 +train_ratio = 0.8 # 80% for training +val_ratio = 0.2 # 20% for validation +tensorboard_log_dir = "/dms_dinov3_siglip2_lmf" + +[inference] +checkpoint_path = "/best_model_dms_latest_lmf.pth" + +[logging] +wandb_project = "material-classification" +wandb_run_name = "dms-dinov3-siglip2-lmf" diff --git a/DMS/dinov3_siglip2_lmf/head.json b/DMS/dinov3_siglip2_lmf/head.json new file mode 100644 index 0000000000000000000000000000000000000000..eb77f54fa9c484a35c75d878f7a5716610fed5ec --- /dev/null +++ b/DMS/dinov3_siglip2_lmf/head.json @@ -0,0 +1,103 @@ +{ + "fusion": "lmf", + "head": "Low-rank Multimodal Fusion", + "head_kwargs": { + "rank": 4, + "hidden_dim": 256, + "modality_dropout": 0.0 + }, + "vision_dim": 1024, + "language_dim": 768, + "num_classes": 57, + "classes": [ + "No label", + "Animal skin", + "Bone/teeth/horn", + "Brickwork", + "Cardboard", + "Carpet/rug", + "Ceiling tile", + "Ceramic", + "Chalkboard/blackboard", + "Clutter", + "Concrete", + "Cork/corkboard", + "Engineered stone", + "Fabric/cloth", + "Fiberglass wool", + "Fire", + "Foliage", + "Food", + "Fur", + "Gemstone/quartz", + "Glass", + "Hair", + "I cannot tell", + "Ice", + "Leather", + "Liquid, non-water", + "Metal", + "Mirror", + "Not on list", + "Paint/plaster/enamel", + "Paper", + "Pearl", + "Photograph/painting", + "Plastic, clear", + "Plastic, non-clear", + "Rubber/latex", + "Sand", + "Skin/lips", + "Sky", + "Snow", + "Soap", + "Soil/mud", + "Sponge", + "Stone, natural", + "Stone, polished", + "Styrofoam", + "Tile", + "Wallpaper", + "Water", + "Wax", + "Whiteboard", + "Wicker", + "Wood", + "Wood, tree", + "Bad polygon", + "Multiple materials", + "Asphalt" + ], + "dataset": "Apple Dense Material Segmentation", + "dataset_key": "DMS", + "encoders": { + "vision": "DINOv3 ViT-L/16 (CLS token, frozen)", + "language": "SigLIP2 base text encoder over Qwen3-VL-8B captions (frozen)", + "short": "DINOv3-SigLIP2", + "slug": "dinov3_siglip2" + }, + "parameters": 1922365, + "training": { + "learning_rate": 5e-05, + "epochs": 50, + "batch_size": 32, + "weight_decay": 0.0001, + "lr_schedule": "constant", + "early_stopping_patience": 0, + "checkpoint": "best validation loss" + }, + "sha256": { + "safetensors": "ee69c3ea4a8f7ecee29b767287987ec1c19082370b2dad48ae4d4b76f45b386a", + "pth": "a5b00ebaeb97a3bb93314ed849bef99d49f222cb4f9f82c5be4d659ed87dca30" + }, + "source": { + "config": "config/config_latest_models_lmf.toml", + "git_commit": "1a8130c922267fb0786a33e3854a7e00763cc38f+dirty", + "checkpoint_mtime": "2026-10-07T14:53:13" + }, + "metrics": { + "mIoU": 0.440722402484214, + "mAcc": 0.6180633687278619, + "eval_samples": 186231 + } +} \ No newline at end of file diff --git a/DMS/dinov3_siglip2_lmf/metrics.json b/DMS/dinov3_siglip2_lmf/metrics.json new file mode 100644 index 0000000000000000000000000000000000000000..63c8ed2ac4d50b997826d67c6598e404f84087ae --- /dev/null +++ b/DMS/dinov3_siglip2_lmf/metrics.json @@ -0,0 +1,296 @@ +{ + "dataset": "DMS", + "checkpoint": "/best_model_dms_latest_lmf.pth", + "fusion_type": "lmf", + "num_eval_samples": 186231, + "mIoU": 0.440722402484214, + "mAcc": 0.6180633687278619, + "per_class": { + "No label": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Animal skin": { + "accuracy": 0.6052631578947368, + "iou": 0.41566265060240964, + "support": 114 + }, + "Bone/teeth/horn": { + "accuracy": 0.6590909090909091, + "iou": 0.5918367346938775, + "support": 44 + }, + "Brickwork": { + "accuracy": 0.7363717605004468, + "iou": 0.5061425061425061, + "support": 1119 + }, + "Cardboard": { + "accuracy": 0.7448680351906158, + "iou": 0.47270471464019853, + "support": 1023 + }, + "Carpet/rug": { + "accuracy": 0.7785207700101318, + "iou": 0.483757239989927, + "support": 4935 + }, + "Ceiling tile": { + "accuracy": 0.7716297786720322, + "iou": 0.4845230574857865, + "support": 994 + }, + "Ceramic": { + "accuracy": 0.8283093053735255, + "iou": 0.5846438482886216, + "support": 2289 + }, + "Chalkboard/blackboard": { + "accuracy": 0.7348837209302326, + "iou": 0.531986531986532, + "support": 215 + }, + "Clutter": { + "accuracy": 0.41509433962264153, + "iou": 0.3235294117647059, + "support": 53 + }, + "Concrete": { + "accuracy": 0.5126964933494559, + "iou": 0.2663316582914573, + "support": 1654 + }, + "Cork/corkboard": { + "accuracy": 0.29411764705882354, + "iou": 0.18292682926829268, + "support": 51 + }, + "Engineered stone": { + "accuracy": 0.19101123595505617, + "iou": 0.14049586776859505, + "support": 89 + }, + "Fabric/cloth": { + "accuracy": 0.7754543850361744, + "iou": 0.708876073718595, + "support": 22668 + }, + "Fiberglass wool": { + "accuracy": 0.25, + "iou": 0.15625, + "support": 20 + }, + "Fire": { + "accuracy": 0.78, + "iou": 0.47560975609756095, + "support": 50 + }, + "Foliage": { + "accuracy": 0.9074290159471023, + "iou": 0.7656711519527404, + "support": 5142 + }, + "Food": { + "accuracy": 0.8670391061452514, + "iou": 0.6308943089430894, + "support": 895 + }, + "Fur": { + "accuracy": 0.8167053364269141, + "iou": 0.6579439252336449, + "support": 431 + }, + "Gemstone/quartz": { + "accuracy": 0.6, + "iou": 0.21739130434782608, + "support": 50 + }, + "Glass": { + "accuracy": 0.753607103218646, + "iou": 0.6518566875312009, + "support": 22525 + }, + "Hair": { + "accuracy": 0.9782991202346041, + "iou": 0.9080021774632553, + "support": 6820 + }, + "I cannot tell": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Ice": { + "accuracy": 0.4909090909090909, + "iou": 0.39705882352941174, + "support": 55 + }, + "Leather": { + "accuracy": 0.7235238987816307, + "iou": 0.40450615666754, + "support": 2134 + }, + "Liquid, non-water": { + "accuracy": 0.4722222222222222, + "iou": 0.3148148148148148, + "support": 36 + }, + "Metal": { + "accuracy": 0.8027255742389273, + "iou": 0.5505389311826336, + "support": 9099 + }, + "Mirror": { + "accuracy": 0.671267252195734, + "iou": 0.4080854309687262, + "support": 797 + }, + "Not on list": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Paint/plaster/enamel": { + "accuracy": 0.6058577668835046, + "iou": 0.5275846970609162, + "support": 31821 + }, + "Paper": { + "accuracy": 0.823810366177251, + "iou": 0.6853064527996469, + "support": 11306 + }, + "Pearl": { + "accuracy": 0.0, + "iou": 0.0, + "support": 1 + }, + "Photograph/painting": { + "accuracy": 0.6854403834631516, + "iou": 0.38209752839011357, + "support": 1669 + }, + "Plastic, clear": { + "accuracy": 0.6834890965732088, + "iou": 0.40735239509840326, + "support": 1605 + }, + "Plastic, non-clear": { + "accuracy": 0.6435244161358811, + "iou": 0.5068844417191594, + "support": 14130 + }, + "Rubber/latex": { + "accuracy": 0.5526561043802423, + "iou": 0.32944444444444443, + "support": 1073 + }, + "Sand": { + "accuracy": 0.32954545454545453, + "iou": 0.25, + "support": 88 + }, + "Skin/lips": { + "accuracy": 0.9675099416194264, + "iou": 0.9362207303094809, + "support": 11819 + }, + "Sky": { + "accuracy": 0.9317548746518106, + "iou": 0.6459607338268426, + "support": 2154 + }, + "Snow": { + "accuracy": 0.6788990825688074, + "iou": 0.4567901234567901, + "support": 109 + }, + "Soap": { + "accuracy": 0.0, + "iou": 0.0, + "support": 7 + }, + "Soil/mud": { + "accuracy": 0.6438356164383562, + "iou": 0.3960674157303371, + "support": 657 + }, + "Sponge": { + "accuracy": 0.16666666666666666, + "iou": 0.13636363636363635, + "support": 18 + }, + "Stone, natural": { + "accuracy": 0.6224406224406225, + "iou": 0.45292014302741357, + "support": 1221 + }, + "Stone, polished": { + "accuracy": 0.36828309305373524, + "iou": 0.2526978417266187, + "support": 763 + }, + "Styrofoam": { + "accuracy": 0.03225806451612903, + "iou": 0.03125, + "support": 31 + }, + "Tile": { + "accuracy": 0.6536789006783789, + "iou": 0.43789326497319975, + "support": 5749 + }, + "Wallpaper": { + "accuracy": 0.5744047619047619, + "iou": 0.3534798534798535, + "support": 672 + }, + "Water": { + "accuracy": 0.6515323496027242, + "iou": 0.49653979238754326, + "support": 881 + }, + "Wax": { + "accuracy": 0.8771929824561403, + "iou": 0.5586592178770949, + "support": 114 + }, + "Whiteboard": { + "accuracy": 0.6606606606606606, + "iou": 0.4365079365079365, + "support": 333 + }, + "Wicker": { + "accuracy": 0.7867768595041322, + "iou": 0.5854858548585485, + "support": 605 + }, + "Wood": { + "accuracy": 0.7917999608278383, + "iou": 0.619122977181071, + "support": 15317 + }, + "Wood, tree": { + "accuracy": 0.7108843537414966, + "iou": 0.46756152125279643, + "support": 588 + }, + "Bad polygon": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Multiple materials": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Asphalt": { + "accuracy": 0.5353535353535354, + "iou": 0.3333333333333333, + "support": 198 + } + }, + "config": "config/config_latest_models_lmf.toml" +} \ No newline at end of file diff --git a/DMS/dinov3_siglip2_lmf/model.pth b/DMS/dinov3_siglip2_lmf/model.pth new file mode 100644 index 0000000000000000000000000000000000000000..dc50f59bca57f6becc53796b73cf2719f077fe97 --- /dev/null +++ b/DMS/dinov3_siglip2_lmf/model.pth @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5b00ebaeb97a3bb93314ed849bef99d49f222cb4f9f82c5be4d659ed87dca30 +size 7701480 diff --git a/DMS/dinov3_siglip2_lmf/model.safetensors b/DMS/dinov3_siglip2_lmf/model.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..80bc59be0630208d2cca39af449b7df1a83aa76c --- /dev/null +++ b/DMS/dinov3_siglip2_lmf/model.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee69c3ea4a8f7ecee29b767287987ec1c19082370b2dad48ae4d4b76f45b386a +size 7695412 diff --git a/DMS/dinov3_siglip2_lmf/split.json b/DMS/dinov3_siglip2_lmf/split.json new file mode 100644 index 0000000000000000000000000000000000000000..05e75c90cb0ee1c25b0f32052575f187f9cdb612 --- /dev/null +++ b/DMS/dinov3_siglip2_lmf/split.json @@ -0,0 +1,8271 @@ +{ + "val_groups": [ + "100023", + "100684", + "100767", + "100806", + "101108", + "101397", + "101542", + "101771", + "102242", + "102298", + "102300", + "102441", + "102723", + "102859", + "102949", + "103045", + "103061", + "103310", + "103351", + "103376", + "103416", + "103494", + "103686", + "103990", + "104894", + "104911", + "104917", + "105053", + "105099", + "105227", + "105355", + "105416", + "105696", + "106358", + "106446", + "106475", + "106484", + "106527", + "106788", + "106933", + "107102", + "107279", + "107305", + "107566", + "107782", + "107866", + "108158", + "108647", + "109239", + "109695", + "109726", + "109789", + "109812", + "109881", + "109999", + "110235", + "110322", + "110893", + "111049", + "111228", + "111280", + "111386", + "112424", + "112448", + "112457", + "112665", + "112857", + "113143", + "113524", + "113793", + "113890", + "114202", + "114224", + "114225", + "114241", + "114705", + "114774", + "115020", + "115498", + "115499", + "115760", + "116168", + "116191", + "116298", + "116449", + "116606", + "116733", + "117104", + "117266", + "117505", + "117707", + "118431", + "119280", + "119283", + "119321", + "119466", + "119521", + "119533", + "119783", + "119809", + "119974", + "120020", + "120125", + "120312", + "120531", + "120550", + "120678", + "120808", + "121071", + "121220", + "121316", + "121985", + "122087", + "122094", + "122153", + "122404", + "122550", + "122844", + "122964", + "123297", + "123381", + "123445", + "123516", + "123601", + "123649", + "123702", + "124102", + "124157", + "124466", + "124752", + "125018", + "125522", + "125549", + "125597", + "125898", + "125979", + "125983", + "126186", + "126431", + "126648", + "126667", + "126907", + "126987", + "127294", + "127355", + "127396", + "127586", + "127669", + "127714", + "127973", + "128106", + "128229", + "128646", + "128868", + "129361", + "129605", + "129853", + "129906", + "129979", + "130273", + "130677", + "130702", + "130741", + "130972", + "131016", + "131115", + "131213", + "131299", + "131561", + "131598", + "131633", + "131677", + "132112", + "132235", + "132287", + "132495", + "132522", + "132602", + "132652", + "132730", + "132957", + "132980", + "133073", + "133187", + "133299", + "133571", + "133998", + "134034", + "134536", + "134647", + "134744", + "134773", + "134830", + "134835", + "134865", + "135254", + "135261", + "135282", + "135490", + "135709", + "136113", + "136415", + "136496", + "136599", + "136677", + "136726", + "136786", + "136847", + "136869", + "136995", + "137430", + "137533", + "137955", + "138677", + "138726", + "139100", + "139408", + "139623", + "139650", + "139653", + "139721", + "139748", + "139977", + "140398", + "140499", + "140727", + "140777", + "141064", + "141182", + "141248", + "141855", + "142040", + "142358", + "142418", + "142569", + "142763", + "142787", + "143098", + "143149", + "143193", + "143481", + "143614", + "143630", + "143668", + "143688", + "143821", + "143884", + "144224", + "144530", + "144759", + "144762", + "144978", + "145373", + "145421", + "145538", + "147431", + "147459", + "147723", + "147858", + "147868", + "148109", + "148756", + "148810", + "148826", + "149253", + "149401", + "149468", + "150308", + "150382", + "150544", + "150565", + "150607", + "150935", + "151054", + "151243", + "151309", + "151551", + "151581", + "151726", + "151871", + "152161", + "152558", + "152760", + "152845", + "153056", + "153383", + "153617", + "153763", + "154293", + "154636", + "154681", + "154850", + "154873", + "154992", + "155063", + "155394", + "155444", + "155476", + "155920", + "156257", + "156261", + "156366", + "156674", + "157619", + "157688", + "157961", + "158086", + "158156", + "158202", + "158423", + "158990", + "159370", + "159801", + "159862", + "159919", + "159957", + "160451", + "160464", + "160982", + "161162", + "161331", + "161519", + "161576", + "161866", + "162020", + "162036", + "162092", + "162306", + "162549", + "162678", + "162798", + "163001", + "163039", + "163164", + "163254", + "163444", + "163517", + "163613", + "163825", + "163860", + "164018", + "164101", + "164713", + "164795", + "164989", + "165403", + "165521", + "165722", + "165988", + "166002", + "166374", + "166659", + "166714", + "166951", + "167223", + "167462", + "167493", + "167663", + "167917", + "168095", + "168127", + "168694", + "168971", + "169649", + "169674", + "169728", + "169817", + "169838", + "170025", + "170807", + "170875", + "170998", + "171186", + "171219", + "171460", + "171626", + "171726", + "172073", + "172138", + "172222", + "172488", + "172575", + "172763", + "172830", + "172960", + "173232", + "173248", + "173732", + "174439", + "174449", + "174521", + "174666", + "175176", + "175266", + "175356", + "175504", + "175844", + "175887", + "176175", + "176211", + "176255", + "176296", + "176375", + "176444", + "176998", + "177058", + "177108", + "177336", + "177473", + "177536", + "177680", + "177701", + "178063", + "178199", + "178270", + "178278", + "178421", + "178454", + "178973", + "179168", + "179264", + "179369", + "179600", + "179943", + "180839", + "181026", + "181157", + "181763", + "181990", + "182089", + "182267", + "182568", + "182583", + "182605", + "182793", + "182840", + "183009", + "183268", + "183662", + "183829", + "183932", + "184491", + "184676", + "184770", + "184802", + "184841", + "184892", + "185054", + "185101", + "185117", + "185165", + "185298", + "185316", + "185777", + "186172", + "186197", + "186424", + "186481", + "186585", + "186719", + "186902", + "187744", + "187814", + "187894", + "188066", + "188085", + "188778", + "189232", + "189269", + "189397", + "189485", + "189490", + "189519", + "189574", + "189751", + "190146", + "190176", + "190206", + "190249", + "190250", + "190332", + "190448", + "190477", + "190569", + "191141", + "191237", + "191400", + "191635", + "192431", + "192460", + "192557", + "192778", + "192831", + "192947", + "193267", + "193325", + "193358", + "193365", + "193374", + "193387", + "193490", + "193566", + "193574", + "193637", + "193681", + "193728", + "193737", + "193811", + "193844", + "193941", + "194054", + "194063", + "194154", + "194170", + "194195", + "194240", + "194254", + "194268", + "194280", + "194303", + "194351", + "194418", + "194489", + "194561", + "194594", + "194597", + "194642", + "194676", + "194688", + "194711", + "194735", + "194800", + "194803", + "194811", + "194814", + "194828", + "194992", + "195013", + "195016", + "195035", + "195196", + "195230", + "195238", + "195296", + "195299", + "195348", + "195405", + "195408", + "195421", + "195475", + "195509", + "195526", + "195535", + "195569", + "195618", + "195638", + "195663", + "195705", + "195709", + "195714", + "195736", + "195789", + "195791", + "195803", + "195804", + "195807", + "195829", + "195831", + "195900", + "195926", + "195938", + "195943", + "195951", + "196009", + "196030", + "196046", + "196126", + "196127", + "196165", + "196221", + "196266", + "196286", + "196293", + "196342", + "196348", + "196369", + "196391", + "196448", + "196476", + "196503", + "196528", + "196529", + "196580", + "196584", + "196604", + "196613", + "196640", + "196641", + "196692", + "196705", + "196730", + "196805", + "196815", + "196850", + "196861", + "196872", + "196888", + "196925", + "196927", + "196981", + "196988", + "196990", + "197034", + "197065", + "197078", + "197087", + "197108", + "197149", + "197206", + "197251", + "197258", + "197263", + "197269", + "197282", + "197290", + "197308", + "197323", + "197348", + "197351", + "197380", + "197432", + "197467", + "197468", + "197516", + "197616", + "197632", + "197687", + "197717", + "197730", + "197781", + "197788", + "197835", + "197884", + "197910", + "197982", + "198031", + "198034", + "198126", + "198132", + "198202", + "198298", + "198314", + "198324", + "198328", + "198348", + "198442", + "198491", + "198550", + "198552", + "198577", + "198585", + "198625", + "198681", + "198690", + "198695", + "198697", + "198706", + "198712", + "198721", + "198724", + "198730", + "198732", + "198767", + "198815", + "198825", + "198907", + "198950", + "198969", + "199023", + "199034", + "199207", + "199245", + "199256", + "199271", + "199309", + "199370", + "199386", + "199396", + "199410", + "199461", + "199477", + "199486", + "199693", + "199733", + "199768", + "199796", + "199832", + "199855", + "199896", + "199910", + "199923", + "199933", + "199947", + "200017", + "200043", + "200108", + "200127", + "200152", + "200170", + "200238", + "200272", + "200309", + "200315", + "200342", + "200413", + "200443", + "200461", + "200551", + "200611", + "200639", + "200647", + "200663", + "200669", + "200692", + "200720", + "200757", + "200765", + "200768", + "200775", + "200803", + "200808", + "200889", + "200896", + "200897", + "200922", + "200983", + "200986", + "201005", + "201020", + "201045", + "201048", + "201113", + "201154", + "201187", + "201234", + "201243", + "201249", + "201284", + "201292", + "201347", + "201388", + "201410", + "201454", + "201497", + "201554", + "201559", + "201591", + "201614", + "201691", + "201754", + "201771", + "201808", + "201852", + "201856", + "201909", + "201913", + "201920", + "201941", + "201977", + "202005", + "202034", + "202120", + "202201", + "202218", + "202236", + "202253", + "202276", + "202307", + "202321", + "202324", + "202377", + "202382", + "202454", + "202490", + "202499", + "202531", + "202546", + "202567", + "202582", + "202630", + "202645", + "202702", + "202771", + "202777", + "202814", + "202873", + "202876", + "202898", + "202942", + "203001", + "203025", + "203044", + "203076", + "203174", + "203226", + "203232", + "203237", + "203240", + "203339", + "203343", + "203372", + "203392", + "203401", + "203416", + "203463", + "203486", + "203515", + "203775", + "203842", + "203844", + "203996", + "204003", + "204018", + "204032", + "204040", + "204104", + "204108", + "204179", + "204182", + "204197", + "204211", + "204212", + "204223", + "204250", + "204271", + "204398", + "204441", + "204448", + "204488", + "204489", + "204497", + "204499", + "204590", + "204628", + "204667", + "204710", + "204790", + "204797", + "204847", + "204850", + "204895", + "204999", + "205044", + "205054", + "205061", + "205093", + "205162", + "205171", + "205189", + "205193", + "205224", + "205245", + "205256", + "205317", + "205353", + "205483", + "205626", + "205646", + "205656", + "205701", + "205732", + "205754", + "205800", + "205846", + "205858", + "205859", + "205901", + "205942", + "205954", + "206023", + "206042", + "206076", + "206132", + "206233", + "206237", + "206249", + "206259", + "206272", + "206331", + "206376", + "206506", + "206545", + "206566", + "206568", + "206577", + "206592", + "206625", + "206773", + "206848", + "206919", + "206930", + "206938", + "206960", + "206963", + "206966", + "207000", + "207006", + "207014", + "207058", + "207081", + "207082", + "207129", + "207140", + "207167", + "207266", + "207283", + "207329", + "207347", + "207351", + "207481", + "207504", + "207554", + "207575", + "207701", + "207735", + "207754", + "207756", + "207757", + "207765", + "207768", + "207789", + "207814", + "207885", + "207888", + "207923", + "207933", + "207938", + "207955", + "207971", + "208023", + "208152", + "208159", + "208160", + "208171", + "208187", + "208201", + "208429", + "208441", + "208468", + "208497", + "208513", + "208532", + "208534", + "208555", + "208578", + "208592", + "208610", + "208625", + "208663", + "208680", + "208690", + "208694", + "208702", + "208723", + "208848", + "208856", + "208864", + "208885", + "208900", + "208924", + "208967", + "208968", + "209081", + "209085", + "209114", + "209174", + "209214", + "209221", + "209313", + "209367", + "209388", + "209396", + "209406", + "209415", + "209430", + "209438", + "209615", + "209653", + "209701", + "209709", + "209726", + "209737", + "209746", + "209753", + "209760", + "209765", + "209792", + "209796", + "209812", + "209823", + "209860", + "209861", + "209895", + "209901", + "209905", + "209932", + "209996", + "210064", + "210160", + "210197", + "210227", + "210229", + "210235", + "210318", + "210331", + "210341", + "210344", + "210353", + "210398", + "210399", + "210465", + "210466", + "210469", + "210473", + "210525", + "210540", + "210567", + "210581", + "210601", + "210668", + "210687", + "210762", + "210796", + "210818", + "210904", + "210930", + "210933", + "210967", + "210996", + "211023", + "211044", + "211069", + "211096", + "211101", + "211108", + "211155", + "211212", + "211268", + "211329", + "211356", + "211531", + "211537", + "211550", + "211595", + "211596", + "211629", + "211664", + "211684", + "211715", + "211752", + "211785", + "211854", + "211859", + "211880", + "211929", + "211937", + "211973", + "211974", + "212055", + "212093", + "212149", + "212153", + "212251", + "212302", + "212366", + "212523", + "212528", + "212559", + "212580", + "212628", + "212696", + "212740", + "212915", + "212956", + "212969", + "212975", + "213064", + "213065", + "213109", + "213113", + "213213", + "213254", + "213365", + "213375", + "213380", + "213385", + "213394", + "213400", + "213503", + "213514", + "213524", + "213534", + "213551", + "213601", + "213636", + "213651", + "213664", + "213737", + "213778", + "213792", + "213816", + "213854", + "213855", + "213871", + "213880", + "213884", + "213996", + "214128", + "214181", + "214188", + "214193", + "214212", + "214272", + "214310", + "214329", + "214331", + "214347", + "214420", + "214434", + "214443", + "214469", + "214481", + "214515", + "214562", + "214633", + "214669", + "214696", + "214701", + "214717", + "214745", + "214779", + "214807", + "214830", + "214921", + "214927", + "214931", + "214990", + "215005", + "215024", + "215076", + "215099", + "215116", + "215172", + "215175", + "215181", + "215196", + "215215", + "215253", + "215308", + "215323", + "215330", + "215373", + "215435", + "215440", + "215479", + "215491", + "215533", + "215583", + "215584", + "215687", + "215693", + "215706", + "215718", + "215778", + "215807", + "215838", + "215859", + "215877", + "215924", + "215935", + "215945", + "215951", + "216020", + "216026", + "216033", + "216040", + "216069", + "216081", + "216174", + "216193", + "216196", + "216207", + "216328", + "216343", + "216430", + "216444", + "216445", + "216497", + "216500", + "216511", + "216513", + "216535", + "216765", + "216967", + "217059", + "217065", + "217076", + "217147", + "217151", + "217155", + "217181", + "217326", + "217363", + "217381", + "217412", + "217475", + "217476", + "217534", + "217565", + "217568", + "217645", + "217660", + "217675", + "217740", + "217779", + "217808", + "217830", + "217858", + "217878", + "217884", + "217908", + "217914", + "217956", + "218062", + "218063", + "218134", + "218137", + "218142", + "218173", + "218178", + "218198", + "218240", + "218281", + "218294", + "218350", + "218373", + "218385", + "218400", + "218425", + "218435", + "218475", + "218502", + "218582", + "218675", + "218687", + "218717", + "218722", + "218781", + "218833", + "218841", + "218944", + "218981", + "218985", + "219032", + "219037", + "219062", + "219065", + "219085", + "219150", + "219165", + "219246", + "219263", + "219295", + "219324", + "219332", + "219381", + "219390", + "219425", + "219454", + "219458", + "219459", + "219475", + "219485", + "219561", + "219619", + "219626", + "219641", + "219665", + "219693", + "219696", + "219740", + "219754", + "219763", + "219799", + "219807", + "219880", + "219958", + "220010", + "220046", + "220081", + "220118", + "220130", + "220140", + "220198", + "220227", + "220318", + "220326", + "220349", + "220391", + "220407", + "220408", + "220419", + "220453", + "220458", + "220471", + "220473", + "220474", + "220477", + "220485", + "220518", + "220539", + "220551", + "220553", + "220572", + "220647", + "220649", + "220653", + "220669", + "220781", + "220787", + "220809", + "220880", + "220898", + "220946", + "220968", + "220984", + "220992", + "221029", + "221030", + "221074", + "221112", + "221125", + "221176", + "221184", + "221221", + "221248", + "221277", + "221305", + "221314", + "221382", + "221400", + "221412", + "221448", + "221454", + "221470", + "221485", + "221489", + "221495", + "221505", + "221562", + "221583", + "221605", + "221606", + "221721", + "221733", + "221763", + "221773", + "221792", + "221799", + "221923", + "222027", + "222127", + "222131", + "222143", + "222191", + "222222", + "222268", + "222269", + "222332", + "222447", + "222449", + "222475", + "222498", + "222520", + "222532", + "222535", + "222560", + "222681", + "222719", + "222759", + "222817", + "222819", + "222828", + "222855", + "222966", + "222979", + "223064", + "223077", + "223106", + "223163", + "223178", + "223189", + "223194", + "223218", + "223289", + "223294", + "223311", + "223318", + "223321", + "223397", + "223401", + "223416", + "223418", + "223462", + "223476", + "223510", + "223543", + "223552", + "223662", + "223673", + "223691", + "223723", + "223838", + "223885", + "223895", + "223918", + "223928", + "223930", + "223933", + "223966", + "224017", + "224022", + "224116", + "224119", + "224172", + "224259", + "224302", + "224328", + "224379", + "224390", + "224409", + "224440", + "224443", + "224457", + "224483", + "224485", + "224496", + "224499", + "224525", + "224537", + "224538", + "224543", + "224549", + "224566", + "224596", + "224614", + "224701", + "224714", + "224754", + "224776", + "224781", + "224830", + "224891", + "22501", + "225044", + "22506", + "225063", + "22507", + "225082", + "225138", + "225162", + "225192", + "225232", + "22524", + "225253", + "225266", + "22527", + "225274", + "22530", + "225303", + "225311", + "225319", + "225327", + "225346", + "22535", + "22537", + "22541", + "225413", + "225428", + "22543", + "225442", + "225473", + "225497", + "225550", + "22556", + "225576", + "22558", + "225618", + "22564", + "22565", + "225688", + "225706", + "22572", + "22574", + "22575", + "225762", + "225766", + "22578", + "22580", + "225846", + "22585", + "225871", + "225907", + "22594", + "225968", + "225989", + "225990", + "22600", + "226008", + "22601", + "22603", + "226059", + "22606", + "226096", + "22611", + "226117", + "226202", + "226230", + "226302", + "22633", + "226336", + "22634", + "226398", + "22641", + "22642", + "226429", + "226448", + "226481", + "226488", + "226491", + "226511", + "226533", + "226566", + "22658", + "226583", + "226586", + "226598", + "226613", + "226648", + "22665", + "226668", + "226702", + "226704", + "226709", + "226767", + "226778", + "226785", + "226849", + "22685", + "22686", + "226883", + "226884", + "226892", + "226915", + "226931", + "226940", + "226958", + "22698", + "226984", + "226993", + "227008", + "22704", + "227086", + "227160", + "227162", + "227163", + "227169", + "227173", + "227182", + "227193", + "22720", + "22721", + "227211", + "227223", + "22723", + "227231", + "227245", + "227275", + "227292", + "227297", + "227314", + "227344", + "227347", + "22740", + "227410", + "227472", + "22748", + "227481", + "22750", + "22753", + "227544", + "227549", + "22756", + "22758", + "227599", + "227616", + "22762", + "227621", + "227627", + "227667", + "227670", + "227681", + "22769", + "227691", + "227697", + "22771", + "227726", + "227753", + "227779", + "22779", + "227799", + "227837", + "227848", + "227914", + "227927", + "22795", + "227967", + "227969", + "227980", + "227986", + "227991", + "228011", + "228025", + "22803", + "228035", + "228043", + "22809", + "22810", + "22814", + "22815", + "228158", + "22816", + "228166", + "228169", + "228181", + "22819", + "22821", + "228212", + "22823", + "228238", + "228253", + "22827", + "228280", + "228285", + "228305", + "228351", + "22836", + "228378", + "228392", + "22842", + "228458", + "228482", + "228496", + "22854", + "228592", + "228614", + "228616", + "22868", + "228691", + "22871", + "22873", + "228771", + "228800", + "22884", + "22885", + "22891", + "228938", + "228939", + "22895", + "22896", + "228961", + "228988", + "228999", + "229024", + "229032", + "22908", + "229083", + "22918", + "229189", + "22919", + "229197", + "22920", + "229209", + "22923", + "229232", + "229235", + "229321", + "229328", + "229364", + "229378", + "229398", + "22940", + "22944", + "229440", + "229456", + "22947", + "229524", + "22953", + "22954", + "22955", + "22956", + "22957", + "22958", + "229603", + "22961", + "229613", + "229656", + "22967", + "229705", + "22971", + "229809", + "229814", + "229859", + "22986", + "229902", + "22991", + "229918", + "22993", + "229943", + "22998", + "229984", + "229994", + "23000", + "230003", + "230009", + "23001", + "230024", + "230034", + "23009", + "23010", + "230109", + "230114", + "230115", + "230118", + "23014", + "230145", + "230147", + "23016", + "230243", + "230257", + "230258", + "230276", + "230281", + "23029", + "23030", + "230305", + "230360", + "23039", + "230394", + "230403", + "230406", + "230486", + "23049", + "23051", + "230519", + "23054", + "230569", + "23058", + "23059", + "230604", + "230620", + "230644", + "23066", + "23071", + "230711", + "230729", + "230754", + "230765", + "230776", + "23080", + "230803", + "23082", + "230822", + "230825", + "23086", + "230913", + "230915", + "230917", + "23092", + "230927", + "230965", + "23098", + "23100", + "231015", + "231038", + "231065", + "23107", + "23108", + "231098", + "231100", + "231171", + "23120", + "231224", + "231236", + "23126", + "231277", + "23130", + "231312", + "231340", + "231382", + "231389", + "23145", + "23153", + "231589", + "23162", + "231633", + "23166", + "23167", + "231710", + "231722", + "23173", + "231732", + "23175", + "23179", + "231838", + "231857", + "231883", + "231902", + "231904", + "23192", + "231935", + "23200", + "23202", + "23204", + "232073", + "232080", + "232095", + "23215", + "232181", + "232190", + "23221", + "232213", + "232235", + "232263", + "232338", + "23234", + "23239", + "232407", + "232434", + "232445", + "23246", + "232480", + "232488", + "232523", + "23256", + "23259", + "232594", + "23260", + "23263", + "232630", + "23264", + "23266", + "232693", + "232698", + "232700", + "232702", + "23272", + "232738", + "232764", + "23278", + "232787", + "23281", + "23284", + "23285", + "23287", + "232875", + "232878", + "23288", + "232885", + "23294", + "232948", + "232970", + "232972", + "232976", + "232998", + "233008", + "233009", + "233015", + "233034", + "233037", + "23308", + "23309", + "23310", + "233119", + "23312", + "233141", + "233208", + "23321", + "23322", + "23324", + "233246", + "233267", + "233282", + "233299", + "23332", + "233326", + "233330", + "23340", + "23353", + "23357", + "23359", + "23372", + "23374", + "23375", + "23383", + "23388", + "23395", + "23402", + "23404", + "23406", + "23409", + "23413", + "23420", + "23434", + "23441", + "23443", + "23453", + "23454", + "23462", + "23463", + "23464", + "23467", + "23475", + "23480", + "23485", + "23489", + "23490", + "23502", + "23504", + "23509", + "23510", + "23514", + "23516", + "23541", + "23542", + "23548", + "23549", + "23551", + "23555", + "23559", + "23578", + "23579", + "23583", + "23585", + "23589", + "23591", + "23612", + "23616", + "23621", + "23627", + "23637", + "23652", + "23654", + "23656", + "23657", + "23668", + "23681", + "23686", + "23692", + "23696", + "23697", + "23701", + "23702", + "23709", + "23739", + "23744", + "23753", + "23756", + "23764", + "23766", + "23774", + "23776", + "23784", + "23785", + "23794", + "23796", + "23799", + "23803", + "23823", + "23824", + "23825", + "23827", + "23835", + "23846", + "23855", + "23859", + "23868", + "23871", + "23876", + "23890", + "23891", + "23893", + "23895", + "23896", + "23897", + "23901", + "23906", + "23921", + "23928", + "23933", + "23945", + "23950", + "23953", + "23955", + "23960", + "23967", + "23973", + "23980", + "23981", + "23984", + "23988", + "23993", + "23995", + "23999", + "24005", + "24019", + "24022", + "24024", + "24029", + "24032", + "24033", + "24036", + "24037", + "24039", + "24043", + "24047", + "24056", + "24059", + "24060", + "24061", + "24072", + "24079", + "24085", + "24090", + "24101", + "24106", + "24112", + "24113", + "24118", + "24119", + "24123", + "24130", + "24131", + "24134", + "24136", + "24138", + "24142", + "24164", + "24168", + "24171", + "24176", + "24181", + "24184", + "24192", + "24197", + "24198", + "24200", + "24219", + "24223", + "24227", + "24230", + "24241", + "24246", + "24250", + "24251", + "24255", + "24263", + "24264", + "24269", + "24273", + "24275", + "24278", + "24284", + "24297", + "24303", + "24305", + "24309", + "24315", + "24323", + "24326", + "24333", + "24337", + "24338", + "24339", + "24341", + "24344", + "24353", + "24361", + "24373", + "24383", + "24390", + "24393", + "24396", + "24400", + "24404", + "24405", + "24410", + "24412", + "24433", + "24436", + "24438", + "24441", + "24446", + "24452", + "24453", + "24464", + "24466", + "24469", + "24487", + "24493", + "24500", + "24508", + "24513", + "24516", + "24517", + "24524", + "24527", + "24531", + "24541", + "24549", + "24557", + "24567", + "24578", + "24579", + "24580", + "24585", + "24588", + "24590", + "24599", + "24600", + "24616", + "24627", + "24630", + "24632", + "24633", + "24637", + "24639", + "24645", + "24649", + "24651", + "24655", + "24657", + "24668", + "24670", + "24676", + "24684", + "24688", + "24689", + "24692", + "24702", + "24704", + "24711", + "24716", + "24717", + "24733", + "24736", + "24739", + "24743", + "24769", + "24774", + "24777", + "24779", + "24782", + "24789", + "24798", + "24799", + "24801", + "24808", + "24822", + "24824", + "24832", + "24836", + "24849", + "24855", + "24863", + "24872", + "24879", + "24881", + "24884", + "24885", + "24886", + "24887", + "24888", + "24894", + "24895", + "24898", + "24902", + "24908", + "24917", + "24925", + "24928", + "24932", + "24940", + "24945", + "24956", + "24959", + "24962", + "24963", + "24968", + "24969", + "24983", + "24985", + "24986", + "24991", + "24995", + "24999", + "25001", + "25007", + "25009", + "25011", + "25012", + "25015", + "25018", + "25020", + "25021", + "25025", + "25031", + "25045", + "25049", + "25054", + "25058", + "25071", + "25081", + "25082", + "25087", + "25091", + "25105", + "25108", + "25112", + "25113", + "25117", + "25119", + "25124", + "25125", + "25129", + "25143", + "25145", + "25160", + "25168", + "25176", + "25186", + "25187", + "25193", + "25194", + "25196", + "25199", + "25207", + "25211", + "25215", + "25217", + "25218", + "25227", + "25245", + "25254", + "25270", + "25284", + "25288", + "25296", + "25299", + "25305", + "25333", + "25337", + "25338", + "25347", + "25349", + "25350", + "25353", + "25355", + "25358", + "25370", + "25393", + "25403", + "25412", + "25413", + "25414", + "25417", + "25422", + "25423", + "25425", + "25428", + "25434", + "25437", + "25449", + "25450", + "25451", + "25452", + "25471", + "25473", + "25474", + "25480", + "25485", + "25486", + "25495", + "25508", + "25509", + "25512", + "25514", + "25518", + "25520", + "25523", + "25524", + "25527", + "25530", + "25531", + "25539", + "25542", + "25544", + "25545", + "25554", + "25561", + "25565", + "25566", + "25577", + "25579", + "25582", + "25587", + "25597", + "25598", + "25601", + "25611", + "25619", + "25622", + "25632", + "25635", + "25637", + "25639", + "25643", + "25647", + "25654", + "25661", + "25665", + "25672", + "25674", + "25677", + "25679", + "25682", + "25686", + "25688", + "25693", + "25696", + "25699", + "25700", + "25704", + "25706", + "25711", + "25712", + "25718", + "25722", + "25726", + "25728", + "25734", + "25740", + "25743", + "25745", + "25747", + "25750", + "25780", + "25785", + "25787", + "25798", + "25799", + "25816", + "25819", + "25823", + "25825", + "25830", + "25834", + "25841", + "25848", + "25853", + "25854", + "25861", + "25863", + "25866", + "25868", + "25869", + "25874", + "25879", + "25899", + "25904", + "25905", + "25913", + "25941", + "25944", + "25945", + "25948", + "25950", + "25953", + "25959", + "25971", + "25973", + "25974", + "25980", + "25983", + "25990", + "25992", + "25994", + "25998", + "25999", + "26004", + "26015", + "26016", + "26017", + "26020", + "26021", + "26024", + "26032", + "26033", + "26039", + "26043", + "26047", + "26053", + "26062", + "26070", + "26074", + "26084", + "26089", + "26093", + "26094", + "26107", + "26108", + "26120", + "26136", + "26144", + "26155", + "26157", + "26159", + "26162", + "26168", + "26170", + "26173", + "26180", + "26184", + "26190", + "26191", + "26197", + "26203", + "26216", + "26220", + "26233", + "26235", + "26243", + "26244", + "26245", + "26253", + "26256", + "26277", + "26281", + "26284", + "26286", + "26289", + "26291", + "26299", + "26316", + "26325", + "26327", + "26347", + "26348", + "26351", + "26352", + "26354", + "26358", + "26359", + "26360", + "26365", + "26371", + "26375", + "26388", + "26399", + "26410", + "26412", + "26414", + "26426", + "26437", + "26438", + "26439", + "26452", + "26477", + "26481", + "26485", + "26486", + "26489", + "26517", + "26526", + "26530", + "26539", + "26541", + "26546", + "26558", + "26560", + "26571", + "26576", + "26577", + "26578", + "26579", + "26581", + "26603", + "26615", + "26620", + "26625", + "26631", + "26643", + "26644", + "26645", + "26658", + "26661", + "26666", + "26670", + "26671", + "26683", + "26685", + "26686", + "26692", + "26696", + "26699", + "26700", + "26707", + "26711", + "26718", + "26735", + "26736", + "26745", + "26748", + "26753", + "26760", + "26762", + "26764", + "26766", + "26768", + "26773", + "26780", + "26785", + "26790", + "26800", + "26808", + "26811", + "26817", + "26818", + "26819", + "26821", + "26833", + "26858", + "26861", + "26872", + "26874", + "26875", + "26878", + "26884", + "26892", + "26895", + "26897", + "26912", + "26918", + "26926", + "26929", + "26937", + "26944", + "26954", + "26958", + "26964", + "26966", + "26968", + "26969", + "26976", + "26980", + "26981", + "26991", + "26992", + "27024", + "27027", + "27028", + "27031", + "27033", + "27042", + "27043", + "27046", + "27050", + "27065", + "27067", + "27078", + "27084", + "27093", + "27121", + "27130", + "27138", + "27144", + "27145", + "27163", + "27172", + "27176", + "27192", + "27193", + "27197", + "27198", + "27200", + "27204", + "27206", + "27223", + "27224", + "27234", + "27236", + "27239", + "27247", + "27249", + "27254", + "27261", + "27268", + "27270", + "27276", + "27277", + "27282", + "27283", + "27284", + "27295", + "27296", + "27301", + "27305", + "27307", + "27313", + "27316", + "27321", + "27323", + "27326", + "27332", + "27346", + "27355", + "27358", + "27361", + "27365", + "27368", + "27369", + "27370", + "27374", + "27382", + "27387", + "27391", + "27395", + "27407", + "27409", + "27421", + "27430", + "27432", + "27436", + "27437", + "27443", + "27444", + "27450", + "27452", + "27458", + "27467", + "27468", + "27473", + "27474", + "27485", + "27487", + "27492", + "27496", + "27497", + "27499", + "27502", + "27508", + "27509", + "27512", + "27519", + "27525", + "27527", + "27529", + "27543", + "27549", + "27553", + "27559", + "27560", + "27570", + "27576", + "27577", + "27579", + "27581", + "27584", + "27592", + "27594", + "27601", + "27604", + "27607", + "27608", + "27611", + "27612", + "27619", + "27624", + "27626", + "27642", + "27648", + "27658", + "27660", + "27671", + "27682", + "27687", + "27688", + "27703", + "27705", + "27714", + "27716", + "27721", + "27722", + "27732", + "27734", + "27740", + "27743", + "27747", + "27749", + "27750", + "27757", + "27760", + "27766", + "27773", + "27780", + "27783", + "27789", + "27798", + "27800", + "27815", + "27817", + "27832", + "27833", + "27836", + "27850", + "27852", + "27858", + "27869", + "27876", + "27877", + "27879", + "27880", + "27881", + "27883", + "27888", + "27893", + "27920", + "27931", + "27935", + "27936", + "27938", + "27940", + "27941", + "27943", + "27947", + "27949", + "27956", + "27962", + "27970", + "27986", + "28006", + "28007", + "28008", + "28013", + "28026", + "28027", + "28028", + "28031", + "28038", + "28039", + "28045", + "28047", + "28050", + "28052", + "28061", + "28069", + "28070", + "28072", + "28073", + "28081", + "28082", + "28090", + "28100", + "28106", + "28109", + "28110", + "28112", + "28116", + "28119", + "28121", + "28122", + "28134", + "28141", + "28150", + "28153", + "28155", + "28158", + "28159", + "28160", + "28162", + "28163", + "28169", + "28177", + "28181", + "28182", + "28183", + "28190", + "28191", + "28197", + "28205", + "28207", + "28208", + "28209", + "28212", + "28218", + "28223", + "28226", + "28228", + "28229", + "28232", + "28241", + "28242", + "28244", + "28249", + "28252", + "28261", + "28262", + "28263", + "28272", + "28273", + "28278", + "28285", + "28294", + "28296", + "28299", + "28311", + "28319", + "28320", + "28323", + "28332", + "28338", + "28346", + "28350", + "28360", + "28372", + "28376", + "28378", + "28382", + "28383", + "28390", + "28392", + "28395", + "28396", + "28411", + "28416", + "28423", + "28441", + "28452", + "28453", + "28463", + "28467", + "28471", + "28473", + "28476", + "28479", + "28483", + "28489", + "28498", + "28499", + "28501", + "28503", + "28504", + "28512", + "28515", + "28517", + "28519", + "28526", + "28538", + "28540", + "28541", + "28542", + "28546", + "28548", + "28553", + "28557", + "28558", + "28560", + "28583", + "28584", + "28591", + "28595", + "28598", + "28600", + "28601", + "28607", + "28609", + "28611", + "28612", + "28616", + "28621", + "28622", + "28631", + "28645", + "28647", + "28660", + "28661", + "28662", + "28665", + "28675", + "28682", + "28685", + "28691", + "28697", + "28699", + "28700", + "28708", + "28719", + "28724", + "28725", + "28727", + "28728", + "28740", + "28741", + "28744", + "28747", + "28749", + "28760", + "28763", + "28764", + "28777", + "28778", + "28782", + "28788", + "28793", + "28794", + "28797", + "28798", + "28803", + "28827", + "28831", + "28833", + "28842", + "28844", + "28846", + "28847", + "28863", + "28867", + "28885", + "28888", + "28895", + "28898", + "28902", + "28912", + "28914", + "28919", + "28923", + "28925", + "28927", + "28939", + "28940", + "28945", + "28949", + "28951", + "28954", + "28956", + "28958", + "28960", + "28972", + "28973", + "28981", + "28982", + "28992", + "29010", + "29022", + "29034", + "29036", + "29040", + "29059", + "29060", + "29072", + "29074", + "29075", + "29077", + "29086", + "29094", + "29095", + "29104", + "29106", + "29107", + "29111", + "29121", + "29124", + "29130", + "29132", + "29147", + "29184", + "29190", + "29215", + "29222", + "29223", + "29242", + "29249", + "29258", + "29260", + "29263", + "29266", + "29281", + "29285", + "29291", + "29304", + "29309", + "29310", + "29315", + "29318", + "29321", + "29326", + "29340", + "29345", + "29347", + "29360", + "29361", + "29366", + "29371", + "29377", + "29394", + "29399", + "29404", + "29406", + "29411", + "29443", + "29447", + "29453", + "29462", + "29468", + "29479", + "29495", + "29499", + "29505", + "29507", + "29509", + "29515", + "29519", + "29524", + "29530", + "29544", + "29546", + "29547", + "29555", + "29563", + "29566", + "29573", + "29575", + "29576", + "29578", + "29590", + "29591", + "29607", + "29634", + "29635", + "29644", + "29645", + "29650", + "29652", + "29658", + "29662", + "29663", + "29676", + "29679", + "29680", + "29684", + "29692", + "29696", + "29699", + "29704", + "29705", + "29707", + "29719", + "29723", + "29725", + "29726", + "29729", + "29735", + "29742", + "29750", + "29762", + "29769", + "29772", + "29774", + "29780", + "29781", + "29792", + "29801", + "29806", + "29811", + "29816", + "29817", + "29821", + "29832", + "29834", + "29836", + "29838", + "29841", + "29843", + "29846", + "29847", + "29853", + "29858", + "29861", + "29868", + "29870", + "29871", + "29883", + "29894", + "29896", + "29898", + "29905", + "29908", + "29911", + "29914", + "29918", + "29927", + "29931", + "29933", + "29941", + "29949", + "29955", + "29961", + "29964", + "29966", + "29967", + "29976", + "29980", + "29983", + "29984", + "29994", + "29997", + "30002", + "30010", + "30021", + "30027", + "30028", + "30029", + "30034", + "30038", + "30047", + "30048", + "30049", + "30050", + "30051", + "30061", + "30064", + "30071", + "30074", + "30075", + "30077", + "30082", + "30087", + "30093", + "30100", + "30101", + "30102", + "30109", + "30117", + "30124", + "30131", + "30134", + "30143", + "30145", + "30154", + "30155", + "30173", + "30177", + "30197", + "30201", + "30203", + "30210", + "30214", + "30216", + "30221", + "30223", + "30231", + "30239", + "30240", + "30242", + "30245", + "30247", + "30254", + "30260", + "30271", + "30272", + "30284", + "30289", + "30296", + "30307", + "30310", + "30312", + "30313", + "30319", + "30328", + "30331", + "30340", + "30345", + "30346", + "30348", + "30356", + "30360", + "30365", + "30375", + "30382", + "30402", + "30403", + "30405", + "30410", + "30414", + "30436", + "30440", + "30441", + "30444", + "30454", + "30457", + "30473", + "30474", + "30476", + "30485", + "30496", + "30501", + "30506", + "30507", + "30513", + "30521", + "30522", + "30524", + "30529", + "30531", + "30534", + "30541", + "30548", + "30551", + "30555", + "30556", + "30560", + "30563", + "30565", + "30567", + "30586", + "30588", + "30590", + "30599", + "30604", + "30614", + "30650", + "30653", + "30656", + "30663", + "30666", + "30667", + "30669", + "30678", + "30689", + "30700", + "30704", + "30711", + "30727", + "30728", + "30729", + "30731", + "30745", + "30746", + "30748", + "30750", + "30759", + "30760", + "30766", + "30771", + "30781", + "30782", + "30794", + "30797", + "30805", + "30813", + "30818", + "30821", + "30848", + "30849", + "30854", + "30868", + "30869", + "30873", + "30874", + "30879", + "30893", + "30896", + "30902", + "30908", + "30911", + "30913", + "30917", + "30918", + "30931", + "30943", + "30949", + "30954", + "30959", + "30964", + "30974", + "30977", + "30981", + "30985", + "30996", + "30997", + "31003", + "31020", + "31025", + "31032", + "31061", + "31064", + "31065", + "31076", + "31082", + "31091", + "31104", + "31105", + "31115", + "31121", + "31123", + "31132", + "31134", + "31138", + "31145", + "31149", + "31154", + "31156", + "31166", + "31167", + "31168", + "31169", + "31170", + "31177", + "31182", + "31183", + "31188", + "31196", + "31198", + "31199", + "31210", + "31227", + "31230", + "31234", + "31244", + "31245", + "31251", + "31252", + "31258", + "31267", + "31275", + "31280", + "31281", + "31282", + "31292", + "31306", + "31307", + "31308", + "31311", + "31312", + "31313", + "31320", + "31330", + "31350", + "31358", + "31359", + "31363", + "31365", + "31381", + "31393", + "31395", + "31396", + "31405", + "31408", + "31414", + "31416", + "31425", + "31426", + "31429", + "31434", + "31437", + "31440", + "31443", + "31448", + "31460", + "31463", + "31469", + "31478", + "31482", + "31485", + "31490", + "31503", + "31509", + "31521", + "31527", + "31538", + "31541", + "31543", + "31546", + "31552", + "31554", + "31563", + "31564", + "31573", + "31579", + "31589", + "31601", + "31602", + "31614", + "31619", + "31623", + "31636", + "31648", + "31654", + "31659", + "31678", + "31688", + "31689", + "31693", + "31711", + "31717", + "31721", + "31725", + "31727", + "31729", + "31731", + "31733", + "31737", + "31740", + "31742", + "31745", + "31748", + "31764", + "31769", + "31772", + "31777", + "31779", + "31785", + "31796", + "31801", + "31810", + "31813", + "31818", + "31819", + "31821", + "31823", + "31824", + "31825", + "31826", + "31828", + "31830", + "31837", + "31845", + "31847", + "31850", + "31851", + "31855", + "31856", + "31857", + "31866", + "31883", + "31889", + "31892", + "31903", + "31907", + "31909", + "31915", + "31919", + "31922", + "31924", + "31927", + "31928", + "31944", + "31945", + "31958", + "31960", + "31963", + "31964", + "31966", + "31971", + "31973", + "31980", + "31986", + "31991", + "31992", + "31994", + "31997", + "32011", + "32016", + "32020", + "32027", + "32029", + "32031", + "32034", + "32039", + "32057", + "32065", + "32073", + "32074", + "32080", + "32082", + "32083", + "32089", + "32091", + "32097", + "32099", + "32100", + "32101", + "32107", + "32109", + "32115", + "32128", + "32141", + "32148", + "32156", + "32177", + "32178", + "32184", + "32187", + "32194", + "32195", + "32196", + "32197", + "32201", + "32212", + "32213", + "32225", + "32231", + "32237", + "32241", + "32247", + "32249", + "32250", + "32265", + "32268", + "32270", + "32276", + "32277", + "32280", + "32281", + "32285", + "32287", + "32288", + "32293", + "32296", + "32305", + "32307", + "32314", + "32326", + "32331", + "32332", + "32342", + "32347", + "32350", + "32362", + "32368", + "32370", + "32376", + "32377", + "32382", + "32385", + "32387", + "32395", + "32412", + "32415", + "32421", + "32430", + "32431", + "32434", + "32435", + "32437", + "32439", + "32452", + "32460", + "32465", + "32467", + "32471", + "32473", + "32474", + "32485", + "32492", + "32495", + "32499", + "32509", + "32515", + "32519", + "32525", + "32527", + "32538", + "32545", + "32551", + "32564", + "32567", + "32568", + "32578", + "32590", + "32601", + "32603", + "32604", + "32607", + "32609", + "32610", + "32613", + "32615", + "32630", + "32631", + "32634", + "32645", + "32646", + "32659", + "32661", + "32665", + "32673", + "32675", + "32678", + "32682", + "32701", + "32702", + "32704", + "32705", + "32709", + "32717", + "32732", + "32742", + "32756", + "32759", + "32763", + "32771", + "32773", + "32774", + "32777", + "32779", + "32781", + "32783", + "32787", + "32791", + "32796", + "32805", + "32808", + "32815", + "32821", + "32826", + "32833", + "32836", + "32847", + "32852", + "32854", + "32858", + "32867", + "32872", + "32884", + "32886", + "32903", + "32907", + "32914", + "32921", + "32922", + "32934", + "32936", + "32941", + "32945", + "32948", + "32963", + "32964", + "32968", + "32976", + "32980", + "32983", + "32984", + "33007", + "33010", + "33025", + "33027", + "33032", + "33035", + "33037", + "33049", + "33050", + "33053", + "33054", + "33057", + "33066", + "33067", + "33073", + "33077", + "33079", + "33085", + "33086", + "33087", + "33091", + "33095", + "33097", + "33104", + "33112", + "33114", + "33121", + "33122", + "33123", + "33133", + "33138", + "33139", + "33140", + "33141", + "33143", + "33158", + "33161", + "33174", + "33175", + "33176", + "33184", + "33189", + "33191", + "33198", + "33201", + "33207", + "33213", + "33217", + "33218", + "33219", + "33227", + "33231", + "33234", + "33237", + "33238", + "33239", + "33252", + "33256", + "33257", + "33273", + "33279", + "33283", + "33286", + "33287", + "33288", + "33292", + "33295", + "33300", + "33302", + "33303", + "33305", + "33311", + "33318", + "33320", + "33323", + "33325", + "33330", + "33335", + "33337", + "33350", + "33358", + "33363", + "33375", + "33377", + "33383", + "33385", + "33391", + "33394", + "33397", + "33419", + "33437", + "33445", + "33458", + "33460", + "33464", + "33465", + "33470", + "33473", + "33491", + "33494", + "33496", + "33497", + "33499", + "33508", + "33509", + "33517", + "33520", + "33526", + "33530", + "33531", + "33532", + "33536", + "33544", + "33551", + "33552", + "33563", + "33564", + "33566", + "33567", + "33575", + "33584", + "33589", + "33590", + "33598", + "33609", + "33615", + "33616", + "33633", + "33635", + "33638", + "33639", + "33641", + "33645", + "33647", + "33656", + "33661", + "33669", + "33677", + "33685", + "33692", + "33703", + "33706", + "33721", + "33722", + "33726", + "33729", + "33735", + "33742", + "33748", + "33749", + "33760", + "33770", + "33801", + "33802", + "33811", + "33814", + "33816", + "33819", + "33822", + "33829", + "33832", + "33840", + "33851", + "33868", + "33871", + "33874", + "33882", + "33886", + "33888", + "33892", + "33903", + "33909", + "33912", + "33916", + "33918", + "33919", + "33922", + "33926", + "33927", + "33935", + "33940", + "33944", + "33946", + "33951", + "33962", + "33965", + "33968", + "33971", + "33981", + "33989", + "33993", + "34011", + "34021", + "34034", + "34048", + "34053", + "34057", + "34067", + "34068", + "34070", + "34079", + "34082", + "34088", + "34110", + "34111", + "34113", + "34120", + "34124", + "34140", + "34155", + "34159", + "34164", + "34178", + "34180", + "34193", + "34200", + "34202", + "34214", + "34215", + "34223", + "34232", + "34234", + "34241", + "34244", + "34248", + "34252", + "34254", + "34266", + "34270", + "34271", + "34278", + "34279", + "34280", + "34284", + "34305", + "34306", + "34310", + "34311", + "34326", + "34361", + "34362", + "34363", + "34367", + "34368", + "34369", + "34383", + "34385", + "34394", + "34397", + "34401", + "34402", + "34403", + "34404", + "34428", + "34440", + "34445", + "34450", + "34456", + "34459", + "34460", + "34461", + "34467", + "34481", + "34482", + "34485", + "34486", + "34496", + "34497", + "34500", + "34501", + "34504", + "34506", + "34507", + "34514", + "34520", + "34533", + "34541", + "34548", + "34551", + "34552", + "34559", + "34560", + "34569", + "34573", + "34589", + "34595", + "34599", + "34606", + "34611", + "34614", + "34620", + "34628", + "34630", + "34631", + "34633", + "34641", + "34650", + "34656", + "34659", + "34679", + "34684", + "34687", + "34688", + "34698", + "34706", + "34708", + "34721", + "34723", + "34728", + "34730", + "34731", + "34739", + "34749", + "34754", + "34758", + "34761", + "34764", + "34774", + "34775", + "34783", + "34794", + "34796", + "34806", + "34809", + "34820", + "34821", + "34825", + "34842", + "34850", + "34860", + "34873", + "34876", + "34879", + "34880", + "34881", + "34892", + "34893", + "34894", + "34895", + "34912", + "34913", + "34916", + "34918", + "34925", + "34931", + "34932", + "34933", + "34937", + "34940", + "34947", + "34948", + "34951", + "34957", + "34958", + "34960", + "34967", + "34969", + "34970", + "34989", + "34995", + "34997", + "35002", + "35005", + "35022", + "35023", + "35044", + "35045", + "35046", + "35051", + "35061", + "35086", + "35089", + "35092", + "35095", + "35106", + "35113", + "35128", + "35132", + "35142", + "35146", + "35147", + "35159", + "35161", + "35167", + "35174", + "35184", + "35192", + "35196", + "35224", + "35227", + "35237", + "35241", + "35242", + "35256", + "35264", + "35270", + "35274", + "35279", + "35282", + "35296", + "35297", + "35302", + "35306", + "35308", + "35312", + "35313", + "35317", + "35318", + "35326", + "35334", + "35341", + "35352", + "35353", + "35355", + "35356", + "35360", + "35362", + "35375", + "35379", + "35382", + "35385", + "35400", + "35408", + "35415", + "35428", + "35431", + "35432", + "35451", + "35454", + "35455", + "35458", + "35466", + "35467", + "35479", + "35481", + "35484", + "35487", + "35490", + "35492", + "35499", + "35501", + "35510", + "35514", + "35522", + "35526", + "35529", + "35530", + "35536", + "35540", + "35542", + "35549", + "35555", + "35559", + "35561", + "35563", + "35564", + "35565", + "35566", + "35575", + "35577", + "35580", + "35585", + "35587", + "35589", + "35591", + "35595", + "35610", + "35617", + "35622", + "35636", + "35640", + "35650", + "35653", + "35658", + "35660", + "35661", + "35669", + "35673", + "35674", + "35676", + "35682", + "35683", + "35686", + "35687", + "35689", + "35691", + "35692", + "35693", + "35697", + "35701", + "35705", + "35711", + "35713", + "35728", + "35735", + "35738", + "35739", + "35746", + "35750", + "35754", + "35757", + "35780", + "35784", + "35813", + "35822", + "35827", + "35828", + "35829", + "35831", + "35833", + "35841", + "35853", + "35854", + "35861", + "35862", + "35864", + "35866", + "35869", + "35871", + "35883", + "35888", + "35890", + "35892", + "35894", + "35895", + "35897", + "35898", + "35899", + "35903", + "35908", + "35910", + "35915", + "35922", + "35939", + "35950", + "35965", + "35968", + "35990", + "35992", + "35993", + "36018", + "36021", + "36035", + "36036", + "36043", + "36046", + "36050", + "36051", + "36056", + "36088", + "36090", + "36096", + "36101", + "36104", + "36119", + "36125", + "36127", + "36136", + "36145", + "36148", + "36150", + "36155", + "36169", + "36184", + "36195", + "36198", + "36203", + "36204", + "36214", + "36219", + "36224", + "36226", + "36258", + "36260", + "36265", + "36267", + "36270", + "36274", + "36279", + "36282", + "36286", + "36289", + "36303", + "36304", + "36312", + "36321", + "36323", + "36326", + "36329", + "36335", + "36352", + "36353", + "36362", + "36367", + "36382", + "36400", + "36405", + "36410", + "36415", + "36424", + "36425", + "36427", + "36446", + "36449", + "36453", + "36456", + "36457", + "36458", + "36468", + "36472", + "36473", + "36476", + "36486", + "36490", + "36498", + "36500", + "36505", + "36507", + "36511", + "36522", + "36529", + "36532", + "36533", + "36562", + "36564", + "36566", + "36573", + "36574", + "36575", + "36586", + "36588", + "36598", + "36605", + "36607", + "36610", + "36612", + "36613", + "36614", + "36616", + "36619", + "36625", + "36629", + "36660", + "36661", + "36669", + "36670", + "36676", + "36679", + "36695", + "36698", + "36699", + "36702", + "36710", + "36712", + "36718", + "36719", + "36728", + "36729", + "36747", + "36750", + "36753", + "36754", + "36755", + "36770", + "36773", + "36776", + "36780", + "36785", + "36788", + "36791", + "36797", + "36803", + "36812", + "36818", + "36833", + "36849", + "36862", + "36865", + "36866", + "36870", + "36888", + "36899", + "36900", + "36901", + "36905", + "36907", + "36912", + "36924", + "36931", + "36942", + "36948", + "36956", + "36958", + "36971", + "36984", + "36986", + "36994", + "36995", + "36997", + "36998", + "37005", + "37007", + "37010", + "37015", + "37017", + "37018", + "37028", + "37035", + "37046", + "37054", + "37055", + "37056", + "37067", + "37071", + "37077", + "37087", + "37090", + "37092", + "37096", + "37102", + "37107", + "37113", + "37120", + "37140", + "37144", + "37145", + "37172", + "37182", + "37187", + "37188", + "37194", + "37199", + "37200", + "37207", + "37225", + "37241", + "37242", + "37249", + "37258", + "37259", + "37265", + "37267", + "37272", + "37277", + "37279", + "37280", + "37293", + "37304", + "37310", + "37313", + "37315", + "37319", + "37322", + "37323", + "37327", + "37333", + "37335", + "37339", + "37341", + "37344", + "37349", + "37351", + "37355", + "37361", + "37363", + "37385", + "37406", + "37411", + "37414", + "37417", + "37423", + "37427", + "37428", + "37435", + "37436", + "37439", + "37440", + "37441", + "37442", + "37453", + "37457", + "37471", + "37475", + "37476", + "37477", + "37497", + "37507", + "37517", + "37519", + "37524", + "37527", + "37530", + "37533", + "37534", + "37539", + "37540", + "37541", + "37545", + "37546", + "37550", + "37568", + "37570", + "37571", + "37575", + "37581", + "37585", + "37588", + "37610", + "37614", + "37615", + "37619", + "37626", + "37635", + "37636", + "37637", + "37638", + "37664", + "37666", + "37683", + "37686", + "37688", + "37698", + "37705", + "37711", + "37713", + "37716", + "37718", + "37721", + "37722", + "37737", + "37748", + "37750", + "37753", + "37759", + "37761", + "37762", + "37766", + "37767", + "37775", + "37782", + "37784", + "37786", + "37792", + "37795", + "37800", + "37804", + "37817", + "37820", + "37828", + "37837", + "37847", + "37853", + "37858", + "37859", + "37865", + "37876", + "37879", + "37883", + "37884", + "37887", + "37888", + "37894", + "37896", + "37900", + "37912", + "37917", + "37925", + "37926", + "37933", + "37935", + "37946", + "37959", + "37967", + "37980", + "37981", + "37983", + "37987", + "37997", + "38007", + "38009", + "38015", + "38027", + "38038", + "38042", + "38076", + "38084", + "38088", + "38093", + "38105", + "38107", + "38119", + "38124", + "38128", + "38129", + "38138", + "38140", + "38154", + "38165", + "38171", + "38172", + "38173", + "38176", + "38180", + "38189", + "38200", + "38207", + "38210", + "38213", + "38221", + "38222", + "38226", + "38239", + "38251", + "38270", + "38276", + "38282", + "38291", + "38297", + "38305", + "38308", + "38314", + "38318", + "38346", + "38372", + "38373", + "38380", + "38381", + "38382", + "38393", + "38394", + "38404", + "38406", + "38409", + "38410", + "38411", + "38413", + "38424", + "38425", + "38426", + "38428", + "38429", + "38431", + "38432", + "38454", + "38455", + "38456", + "38463", + "38466", + "38470", + "38471", + "38475", + "38476", + "38480", + "38482", + "38488", + "38491", + "38494", + "38495", + "38501", + "38506", + "38536", + "38541", + "38542", + "38548", + "38549", + "38553", + "38557", + "38562", + "38565", + "38573", + "38579", + "38585", + "38587", + "38600", + "38607", + "38625", + "38637", + "38646", + "38648", + "38657", + "38659", + "38664", + "38665", + "38675", + "38676", + "38680", + "38684", + "38693", + "38698", + "38699", + "38704", + "38706", + "38707", + "38710", + "38711", + "38716", + "38722", + "38727", + "38734", + "38741", + "38743", + "38745", + "38749", + "38757", + "38760", + "38781", + "38784", + "38786", + "38788", + "38789", + "38810", + "38824", + "38835", + "38838", + "38851", + "38852", + "38857", + "38867", + "38871", + "38875", + "38877", + "38884", + "38885", + "38888", + "38890", + "38893", + "38900", + "38911", + "38914", + "38922", + "38931", + "38937", + "38941", + "38942", + "38943", + "38945", + "38956", + "38961", + "38970", + "38974", + "38979", + "38987", + "38988", + "38994", + "39007", + "39021", + "39022", + "39029", + "39033", + "39036", + "39045", + "39048", + "39049", + "39052", + "39054", + "39056", + "39062", + "39065", + "39069", + "39072", + "39075", + "39077", + "39078", + "39081", + "39082", + "39090", + "39091", + "39092", + "39093", + "39094", + "39095", + "39097", + "39099", + "39100", + "39102", + "39107", + "39123", + "39129", + "39130", + "39131", + "39151", + "39153", + "39154", + "39158", + "39159", + "39165", + "39166", + "39175", + "39178", + "39180", + "39184", + "39202", + "39203", + "39205", + "39206", + "39208", + "39215", + "39223", + "39230", + "39236", + "39238", + "39239", + "39248", + "39275", + "39287", + "39291", + "39296", + "39301", + "39303", + "39305", + "39307", + "39320", + "39321", + "39323", + "39340", + "39341", + "39351", + "39368", + "39369", + "39373", + "39379", + "39385", + "39387", + "39404", + "39406", + "39410", + "39411", + "39419", + "39424", + "39425", + "39426", + "39427", + "39428", + "39431", + "39436", + "39439", + "39443", + "39455", + "39457", + "39468", + "39472", + "39474", + "39480", + "39497", + "39500", + "39511", + "39513", + "39516", + "39529", + "39535", + "39538", + "39554", + "39555", + "39556", + "39561", + "39566", + "39570", + "39573", + "39575", + "39608", + "39613", + "39614", + "39618", + "39619", + "39622", + "39626", + "39631", + "39638", + "39640", + "39641", + "39649", + "39653", + "39654", + "39658", + "39674", + "39676", + "39678", + "39697", + "39718", + "39723", + "39724", + "39729", + "39731", + "39736", + "39737", + "39740", + "39745", + "39747", + "39752", + "39756", + "39760", + "39761", + "39764", + "39765", + "39787", + "39789", + "39790", + "39791", + "39793", + "39794", + "39798", + "39801", + "39802", + "39805", + "39806", + "39815", + "39817", + "39822", + "39826", + "39830", + "39832", + "39850", + "39855", + "39870", + "39871", + "39878", + "39886", + "39887", + "39889", + "39890", + "39893", + "39912", + "39913", + "39921", + "39928", + "39944", + "39947", + "39955", + "39961", + "39964", + "39966", + "39969", + "39970", + "39973", + "39979", + "40014", + "40015", + "40022", + "40038", + "40041", + "40042", + "40053", + "40055", + "40056", + "40058", + "40060", + "40063", + "40068", + "40070", + "40091", + "40093", + "40096", + "40101", + "40117", + "40122", + "40127", + "40128", + "40131", + "40134", + "40138", + "40140", + "40143", + "40144", + "40164", + "40167", + "40169", + "40170", + "40177", + "40178", + "40180", + "40190", + "40193", + "40197", + "40200", + "40201", + "40202", + "40208", + "40213", + "40218", + "40224", + "40243", + "40247", + "40250", + "40252", + "40253", + "40263", + "40266", + "40268", + "40276", + "40277", + "40282", + "40294", + "40296", + "40299", + "40308", + "40321", + "40333", + "40348", + "40350", + "40353", + "40355", + "40358", + "40362", + "40367", + "40375", + "40377", + "40393", + "40394", + "40401", + "40408", + "40415", + "40416", + "40421", + "40424", + "40436", + "40442", + "40450", + "40457", + "40468", + "40470", + "40474", + "40478", + "40483", + "40498", + "40506", + "40525", + "40534", + "40535", + "40536", + "40539", + "40543", + "40548", + "40556", + "40561", + "40574", + "40575", + "40584", + "40587", + "40590", + "40592", + "40604", + "40607", + "40609", + "40619", + "40626", + "40651", + "40656", + "40660", + "40669", + "40674", + "40677", + "40686", + "40689", + "40691", + "40699", + "40702", + "40712", + "40715", + "40716", + "40723", + "40731", + "40757", + "40761", + "40773", + "40777", + "40782", + "40788", + "40795", + "40804", + "40818", + "40819", + "40821", + "40827", + "40828", + "40829", + "40837", + "40840", + "40841", + "40842", + "40845", + "40849", + "40850", + "40853", + "40864", + "40870", + "40874", + "40875", + "40881", + "40887", + "40889", + "40894", + "40897", + "40901", + "40906", + "40907", + "40918", + "40922", + "40924", + "40926", + "40931", + "40946", + "40952", + "40965", + "40968", + "40974", + "40975", + "40989", + "40995", + "40997", + "41003", + "41004", + "41005", + "41009", + "41012", + "41019", + "41020", + "41034", + "41037", + "41039", + "41044", + "41054", + "41064", + "41069", + "41072", + "41079", + "41083", + "41094", + "41096", + "41108", + "41122", + "41129", + "41132", + "41134", + "41156", + "41158", + "41160", + "41181", + "41193", + "41198", + "41202", + "41204", + "41210", + "41212", + "41214", + "41223", + "41226", + "41233", + "41261", + "41265", + "41270", + "41279", + "41285", + "41292", + "41293", + "41294", + "41299", + "41304", + "41313", + "41314", + "41322", + "41338", + "41345", + "41347", + "41349", + "41350", + "41352", + "41354", + "41355", + "41358", + "41359", + "41365", + "41377", + "41392", + "41398", + "41402", + "41405", + "41411", + "41412", + "41420", + "41422", + "41429", + "41434", + "41449", + "41452", + "41453", + "41456", + "41459", + "41460", + "41467", + "41470", + "41474", + "41480", + "41481", + "41483", + "41485", + "41490", + "41499", + "41500", + "41501", + "41506", + "41514", + "41516", + "41523", + "41528", + "41543", + "41547", + "41549", + "41555", + "41556", + "41558", + "41565", + "41572", + "41573", + "41576", + "41579", + "41581", + "41588", + "41605", + "41625", + "41627", + "41633", + "41637", + "41638", + "41643", + "41645", + "41650", + "41653", + "41665", + "41666", + "41667", + "41668", + "41670", + "41678", + "41685", + "41691", + "41693", + "41695", + "41696", + "41699", + "41717", + "41728", + "41729", + "41736", + "41748", + "41771", + "41775", + "41795", + "41797", + "41806", + "41811", + "41814", + "41826", + "41834", + "41838", + "41843", + "41848", + "41849", + "41852", + "41858", + "41860", + "41872", + "41874", + "41876", + "41882", + "41888", + "41895", + "41899", + "41900", + "41908", + "41912", + "41917", + "41920", + "41922", + "41931", + "41942", + "41949", + "41950", + "41955", + "41960", + "41965", + "41972", + "41976", + "41982", + "41989", + "42000", + "42009", + "42012", + "42014", + "42016", + "42022", + "42026", + "42028", + "42047", + "42052", + "42069", + "42070", + "42071", + "42077", + "42078", + "42081", + "42087", + "42089", + "42091", + "42118", + "42122", + "42126", + "42130", + "42138", + "42144", + "42147", + "42153", + "42164", + "42166", + "42168", + "42169", + "42179", + "42181", + "42187", + "42193", + "42200", + "42205", + "42211", + "42212", + "42215", + "42217", + "42231", + "42236", + "42244", + "42256", + "42265", + "42275", + "42281", + "42288", + "42294", + "42297", + "42304", + "42309", + "42310", + "42311", + "42312", + "42313", + "42318", + "42325", + "42332", + "42335", + "42338", + "42342", + "42345", + "42346", + "42355", + "42363", + "42366", + "42368", + "42369", + "42371", + "42372", + "42385", + "42387", + "42418", + "42419", + "42423", + "42425", + "42428", + "42434", + "42440", + "42444", + "42448", + "42454", + "42458", + "42465", + "42472", + "42475", + "42477", + "42486", + "42488", + "42495", + "42499", + "42512", + "42513", + "42514", + "42515", + "42523", + "42526", + "42527", + "42531", + "42534", + "42540", + "42542", + "42549", + "42550", + "42555", + "42561", + "42569", + "42580", + "42582", + "42588", + "42592", + "42598", + "42600", + "42615", + "42617", + "42626", + "42636", + "42648", + "42666", + "42681", + "42686", + "42706", + "42710", + "42719", + "42720", + "42723", + "42736", + "42747", + "42750", + "42757", + "42758", + "42759", + "42774", + "42777", + "42779", + "42782", + "42792", + "42793", + "42816", + "42823", + "42833", + "42873", + "42884", + "42888", + "42893", + "42898", + "42905", + "42906", + "42909", + "42910", + "42912", + "42920", + "42921", + "42922", + "42926", + "42928", + "42933", + "42938", + "42947", + "42948", + "42952", + "42955", + "42987", + "43000", + "43010", + "43016", + "43028", + "43031", + "43052", + "43054", + "43055", + "43060", + "43066", + "43067", + "43074", + "43078", + "43079", + "43088", + "43091", + "43099", + "43101", + "43107", + "43108", + "43112", + "43114", + "43126", + "43136", + "43147", + "43169", + "43170", + "43182", + "43189", + "43202", + "43204", + "43212", + "43217", + "43228", + "43233", + "43235", + "43240", + "43243", + "43262", + "43264", + "43265", + "43272", + "43279", + "43288", + "43289", + "43291", + "43309", + "43311", + "43324", + "43331", + "43335", + "43338", + "43350", + "43357", + "43364", + "43372", + "43380", + "43381", + "43382", + "43385", + "43392", + "43393", + "43395", + "43399", + "43400", + "43401", + "43402", + "43412", + "43427", + "43428", + "43432", + "43443", + "43446", + "43450", + "43454", + "43457", + "43462", + "43467", + "43469", + "43470", + "43486", + "43488", + "43491", + "43494", + "43500", + "43505", + "43521", + "43522", + "43523", + "43527", + "43532", + "43538", + "43562", + "43564", + "43565", + "43571", + "43574", + "43581", + "43582", + "43588", + "43591", + "43592", + "43597", + "43601", + "43602", + "43604", + "43606", + "43607", + "43612", + "43628", + "43634", + "43644", + "43653", + "43654", + "43667", + "43676", + "43688", + "43689", + "43695", + "43710", + "43711", + "43713", + "43716", + "43717", + "43723", + "43733", + "43742", + "43751", + "43760", + "43771", + "43778", + "43783", + "43791", + "43798", + "43802", + "43805", + "43806", + "43819", + "43821", + "43825", + "43833", + "43837", + "43839", + "43854", + "43856", + "43859", + "43862", + "43864", + "43866", + "43870", + "43872", + "43874", + "43879", + "43887", + "43890", + "43897", + "43900", + "43908", + "43911", + "43915", + "43920", + "43928", + "43934", + "43938", + "43943", + "43946", + "43949", + "43955", + "43956", + "43960", + "43974", + "43982", + "43999", + "44007", + "44022", + "44026", + "44040", + "44042", + "44044", + "44045", + "44053", + "44054", + "44056", + "44057", + "44060", + "44061", + "44066", + "44078", + "44079", + "44084", + "44087", + "44096", + "44100", + "44102", + "44114", + "44130", + "44134", + "44135", + "44156", + "44163", + "44169", + "44172", + "44174", + "44187", + "44192", + "44200", + "44201", + "44202", + "44203", + "44216", + "44217", + "44220", + "44223", + "44224", + "44227", + "44230", + "44238", + "44242", + "44243", + "44244", + "44247", + "44255", + "44268", + "44269", + "44275", + "44278", + "44279", + "44281", + "44285", + "44286", + "44289", + "44294", + "44301", + "44307", + "44318", + "44319", + "44320", + "44334", + "44338", + "44339", + "44342", + "44350", + "44353", + "44354", + "44356", + "44362", + "44366", + "44367", + "44373", + "44374", + "44377", + "44390", + "44394", + "44400", + "44402", + "44405", + "44410", + "44415", + "44427", + "44429", + "44435", + "44441", + "44446", + "44458", + "44465", + "44467", + "44469", + "44471", + "44473", + "44480", + "44483", + "44496", + "44498", + "44508", + "44510", + "44515", + "44523", + "44524", + "44536", + "44555", + "44556", + "44559", + "44560", + "44561", + "44562", + "44569", + "44570", + "44574", + "44580", + "44587", + "44603", + "44608", + "44613", + "44617", + "44619", + "44624", + "44625", + "44629", + "44636", + "44638", + "44640", + "44641", + "44648", + "44654", + "44656", + "44663", + "44673", + "44691", + "44705", + "44708", + "44717", + "44748", + "44761", + "44762", + "44770", + "44772", + "44775", + "44778", + "44780", + "44784", + "44786", + "44787", + "44803", + "44811", + "44818", + "44829", + "44831", + "44833", + "44837", + "44849", + "44851", + "44852", + "44857", + "44858", + "44859", + "44861", + "44862", + "44870", + "44875", + "44882", + "44887", + "44893", + "44897", + "44898", + "44905", + "44909", + "44915", + "44916", + "44917", + "44918", + "44934", + "44936", + "44937", + "44938", + "44940", + "44949", + "44953", + "44959", + "44964", + "44972", + "44973", + "44974", + "44978", + "44984", + "44992", + "44995", + "44997", + "45020", + "45024", + "45028", + "45031", + "45048", + "45051", + "45068", + "45071", + "45076", + "45077", + "45079", + "45080", + "45087", + "45088", + "45099", + "45102", + "45104", + "45116", + "45122", + "45128", + "45136", + "45145", + "45150", + "45151", + "45158", + "45168", + "45170", + "45173", + "45179", + "45182", + "45183", + "45184", + "45185", + "45189", + "45207", + "45208", + "45210", + "45220", + "45231", + "45261", + "45264", + "45266", + "45269", + "45271", + "45289", + "45291", + "45295", + "45296", + "45309", + "45315", + "45316", + "45329", + "45345", + "45347", + "45350", + "45353", + "45364", + "45365", + "45366", + "45367", + "45370", + "45377", + "45378", + "45381", + "45388", + "45390", + "45398", + "45409", + "45412", + "45415", + "45425", + "45430", + "45446", + "45453", + "45455", + "45463", + "45475", + "45478", + "45490", + "45497", + "45499", + "45500", + "45503", + "45514", + "45523", + "45532", + "45537", + "45539", + "45540", + "45541", + "45542", + "45551", + "45563", + "45566", + "45570", + "45577", + "45582", + "45586", + "45605", + "45611", + "45614", + "45619", + "45625", + "45628", + "45630", + "45632", + "45635", + "45637", + "45638", + "45639", + "45644", + "45648", + "45649", + "45661", + "45667", + "45668", + "45671", + "45675", + "45691", + "45695", + "45703", + "45705", + "45707", + "45708", + "45715", + "45718", + "45719", + "45726", + "45729", + "45730", + "45731", + "45736", + "45741", + "45747", + "45755", + "45759", + "45761", + "45768", + "45769", + "45770", + "45771", + "45777", + "45781", + "45786", + "45802", + "45810", + "45813", + "45818", + "45821", + "45833", + "45835", + "45846", + "45848", + "45853", + "45871", + "45888", + "45890", + "45896", + "45897", + "45905", + "45909", + "45911", + "45915", + "45917", + "45919", + "45923", + "45925", + "45928", + "45930", + "45944", + "45950", + "45958", + "45959", + "45966", + "45967", + "45972", + "45976", + "45984", + "45987", + "45988", + "45992", + "45995", + "45997", + "46006", + "46009", + "46011", + "46019", + "46020", + "46022", + "46024", + "46030", + "46038", + "46042", + "46055", + "46058", + "46063", + "46067", + "46070", + "46071", + "46073", + "46078", + "46081", + "46089", + "46090", + "46092", + "46101", + "46105", + "46113", + "46118", + "46124", + "46131", + "46133", + "46139", + "46142", + "46144", + "46147", + "46158", + "46159", + "46161", + "46162", + "46164", + "46167", + "46179", + "46181", + "46182", + "46187", + "46214", + "46216", + "46218", + "46220", + "46232", + "46233", + "46246", + "46247", + "46248", + "46249", + "46251", + "46256", + "46264", + "46268", + "46279", + "46286", + "46292", + "46299", + "46301", + "46302", + "46311", + "46316", + "46325", + "46327", + "46333", + "46338", + "46342", + "46344", + "46351", + "46366", + "46369", + "46378", + "46380", + "46381", + "46382", + "46383", + "46388", + "46395", + "46408", + "46415", + "46417", + "46421", + "46422", + "46426", + "49162", + "49168", + "49169", + "49170", + "49178", + "49185", + "49186", + "49191", + "49194", + "49196", + "49198", + "49210", + "49218", + "49219", + "49223", + "49228", + "49239", + "49243", + "49249", + "49260", + "49267", + "49272", + "49278", + "49286", + "49297", + "49305", + "49306", + "49308", + "49319", + "49323", + "49327", + "49333", + "49341", + "49343", + "49344", + "49347", + "49356", + "49367", + "49369", + "49371", + "49396", + "49399", + "49401", + "49404", + "49405", + "49413", + "49416", + "49422", + "49426", + "49431", + "49434", + "49444", + "49445", + "49453", + "49459", + "49465", + "49468", + "49469", + "49480", + "49482", + "49491", + "49493", + "49503", + "49504", + "49506", + "49509", + "49511", + "49522", + "49525", + "49533", + "49538", + "49543", + "49561", + "49572", + "49576", + "49577", + "49579", + "49580", + "49585", + "49587", + "49593", + "49599", + "49609", + "49613", + "49618", + "49622", + "49636", + "49637", + "49645", + "49657", + "49683", + "49685", + "49695", + "49703", + "49708", + "49709", + "49720", + "49733", + "49737", + "49748", + "49754", + "49755", + "49761", + "49775", + "49776", + "49783", + "49798", + "49801", + "49808", + "49812", + "49815", + "49828", + "49833", + "49840", + "49841", + "49844", + "49849", + "49857", + "49861", + "49864", + "49866", + "49876", + "49890", + "49904", + "49914", + "49922", + "49931", + "49947", + "49951", + "49953", + "49964", + "49965", + "49972", + "49973", + "49978", + "49986", + "49996", + "50002", + "50007", + "50013", + "50017", + "50018", + "50034", + "50035", + "50037", + "50054", + "50063", + "50080", + "50081", + "50084", + "50098", + "50105", + "50107", + "50109", + "50110", + "50121", + "50123", + "50127", + "50138", + "50145", + "50147", + "50148", + "50154", + "50155", + "50160", + "50162", + "50166", + "50173", + "50181", + "50187", + "50188", + "50203", + "50213", + "50220", + "50229", + "50241", + "50247", + "50254", + "50268", + "50276", + "50289", + "50292", + "50299", + "50314", + "50320", + "50325", + "50346", + "50352", + "50353", + "50361", + "50368", + "50369", + "50372", + "50374", + "50378", + "50407", + "50408", + "50410", + "50418", + "50420", + "50425", + "50426", + "50432", + "50435", + "50440", + "50450", + "50451", + "50455", + "50463", + "50468", + "50472", + "50475", + "50482", + "50488", + "50497", + "50501", + "50503", + "50504", + "50519", + "50521", + "50528", + "50537", + "50540", + "50542", + "50545", + "50554", + "50559", + "50564", + "50566", + "50571", + "50575", + "50579", + "50590", + "50599", + "50603", + "50620", + "50624", + "50626", + "50637", + "50639", + "50640", + "50645", + "50649", + "50651", + "50663", + "50669", + "50687", + "50692", + "50695", + "50703", + "50712", + "50721", + "50724", + "50734", + "50743", + "50744", + "50762", + "50764", + "50767", + "50769", + "50773", + "50775", + "50776", + "50780", + "50792", + "50794", + "50803", + "50808", + "50810", + "50814", + "50817", + "50819", + "50824", + "50828", + "50832", + "50834", + "50852", + "50861", + "50867", + "50873", + "50875", + "50882", + "50899", + "50904", + "50909", + "50913", + "50921", + "50925", + "50927", + "50930", + "50936", + "50942", + "50944", + "50947", + "50952", + "50953", + "50961", + "50962", + "50975", + "50978", + "50981", + "50987", + "50994", + "51004", + "51008", + "51010", + "51011", + "51022", + "51024", + "51028", + "51032", + "51033", + "51034", + "51040", + "51041", + "51048", + "51050", + "51054", + "51070", + "51071", + "51078", + "51086", + "51087", + "51093", + "51094", + "51097", + "51110", + "51112", + "51114", + "51116", + "51117", + "51121", + "51122", + "51124", + "51132", + "51136", + "51138", + "51149", + "51156", + "51179", + "51198", + "51201", + "51202", + "51204", + "51210", + "51213", + "51217", + "51218", + "51220", + "51222", + "51228", + "51229", + "51241", + "51252", + "51261", + "51263", + "51268", + "51291", + "51292", + "51301", + "51311", + "51314", + "51316", + "51327", + "51348", + "51363", + "51371", + "51372", + "51378", + "51379", + "51384", + "51388", + "51389", + "51391", + "51400", + "51402", + "51411", + "51424", + "51425", + "51426", + "51429", + "51430", + "51435", + "51438", + "51447", + "51453", + "51459", + "51464", + "51465", + "51469", + "51476", + "51478", + "51481", + "51487", + "51493", + "51494", + "51497", + "51501", + "51503", + "51508", + "51513", + "51520", + "51523", + "51529", + "51533", + "51535", + "51537", + "51538", + "51547", + "51554", + "51559", + "51567", + "51586", + "51588", + "51589", + "51598", + "51605", + "51611", + "51616", + "51621", + "51626", + "51628", + "51634", + "51641", + "51648", + "51649", + "51671", + "51681", + "51688", + "51692", + "51700", + "51702", + "51713", + "51719", + "51723", + "51729", + "51732", + "51733", + "51748", + "51751", + "51755", + "51764", + "51769", + "51772", + "51773", + "51777", + "51778", + "51780", + "51789", + "51792", + "51803", + "51806", + "51817", + "51825", + "51833", + "51835", + "51836", + "51841", + "51847", + "51849", + "51852", + "51855", + "51856", + "51859", + "51861", + "51863", + "51864", + "51872", + "51877", + "51881", + "51887", + "51892", + "51897", + "51904", + "51906", + "51908", + "51912", + "51917", + "51926", + "51928", + "51929", + "51948", + "51951", + "51964", + "51971", + "51972", + "51973", + "51974", + "51975", + "51990", + "51992", + "51996", + "52000", + "52013", + "52021", + "52026", + "52030", + "52036", + "52039", + "52058", + "52060", + "52064", + "52070", + "52081", + "52082", + "52089", + "52092", + "52097", + "52104", + "52106", + "52116", + "52121", + "52122", + "52127", + "52133", + "52134", + "52140", + "52148", + "52152", + "52156", + "52161", + "52162", + "52167", + "52169", + "52173", + "52192", + "52193", + "52196", + "52209", + "52218", + "52228", + "52249", + "52253", + "52260", + "52261", + "52267", + "52269", + "52271", + "52272", + "52273", + "52288", + "52290", + "52301", + "52305", + "52306", + "52313", + "52315", + "52319", + "52322", + "52330", + "52342", + "52346", + "52351", + "52354", + "52363", + "52382", + "52386", + "52390", + "52392", + "52409", + "52427", + "52428", + "52436", + "52459", + "52462", + "52465", + "52485", + "52488", + "52500", + "52502", + "52506", + "52511", + "52516", + "52518", + "52520", + "52524", + "52525", + "52530", + "52548", + "52554", + "52555", + "52563", + "52572", + "52578", + "52584", + "52586", + "52587", + "52589", + "52591", + "52593", + "52609", + "52615", + "52617", + "52623", + "52628", + "52629", + "52631", + "52640", + "52648", + "52649", + "52651", + "52658", + "52670", + "52673", + "52676", + "52681", + "52686", + "52690", + "52698", + "52699", + "52710", + "52712", + "52729", + "52734", + "52742", + "52753", + "52755", + "52763", + "52770", + "52779", + "52781", + "52790", + "52793", + "52802", + "52804", + "52808", + "52817", + "52821", + "52834", + "52835", + "52837", + "52857", + "52858", + "52860", + "52863", + "52872", + "52873", + "52874", + "52878", + "52880", + "52890", + "52893", + "52907", + "52908", + "52911", + "52914", + "52925", + "52930", + "52931", + "52932", + "52936", + "52945", + "52961", + "52966", + "52967", + "52974", + "52976", + "52978", + "52981", + "52983", + "53002", + "53010", + "53022", + "53025", + "53028", + "53029", + "53030", + "53034", + "53039", + "53041", + "53042", + "53059", + "53066", + "53078", + "53081", + "53086", + "53087", + "53089", + "53093", + "53097", + "53099", + "53104", + "53114", + "53115", + "53116", + "53119", + "53121", + "53140", + "53145", + "53162", + "53172", + "53175", + "53180", + "53188", + "53190", + "53202", + "53203", + "53211", + "53212", + "53214", + "53221", + "53223", + "53233", + "53238", + "53239", + "53240", + "53242", + "53251", + "53252", + "53254", + "53255", + "53274", + "53290", + "53292", + "53294", + "53298", + "53301", + "53307", + "53313", + "53323", + "53334", + "53343", + "53367", + "53376", + "53382", + "53383", + "53392", + "53397", + "53405", + "53406", + "53408", + "53418", + "53419", + "53422", + "53423", + "53426", + "53428", + "53430", + "53432", + "53436", + "53443", + "53446", + "53451", + "53463", + "53464", + "53466", + "53469", + "53472", + "53474", + "53477", + "53492", + "53494", + "53497", + "53500", + "53509", + "53510", + "53515", + "53518", + "53535", + "53540", + "53550", + "53554", + "53569", + "53575", + "53582", + "53588", + "53609", + "53615", + "53617", + "53624", + "53629", + "53642", + "53647", + "53648", + "53654", + "53656", + "53657", + "53658", + "53659", + "53663", + "53673", + "53678", + "53680", + "53682", + "53686", + "53701", + "53703", + "53706", + "53711", + "53712", + "53729", + "53731", + "53734", + "53750", + "53763", + "53772", + "53777", + "53781", + "53786", + "53791", + "53796", + "53798", + "53803", + "53818", + "53823", + "53830", + "53832", + "53845", + "53847", + "53852", + "53858", + "53861", + "53867", + "53870", + "53879", + "53881", + "53884", + "53889", + "53895", + "53904", + "53918", + "53921", + "53925", + "53928", + "53930", + "53932", + "53933", + "53950", + "53955", + "53962", + "53963", + "53969", + "53972", + "53986", + "53992", + "53996", + "54024", + "54027", + "54029", + "54030", + "54032", + "54033", + "54035", + "54044", + "54047", + "54048", + "54049", + "54066", + "54067", + "54068", + "54072", + "54076", + "54078", + "54082", + "54086", + "54095", + "54109", + "54127", + "54132", + "54140", + "54141", + "54145", + "54148", + "54149", + "54155", + "54165", + "54187", + "54192", + "54194", + "54204", + "54213", + "54218", + "54225", + "54232", + "54251", + "54255", + "54259", + "54262", + "54270", + "54276", + "54279", + "54282", + "54285", + "54287", + "54293", + "54298", + "54301", + "54303", + "54304", + "54308", + "54312", + "54319", + "54334", + "54345", + "54348", + "54353", + "54354", + "54357", + "54361", + "54368", + "54374", + "54379", + "54383", + "54385", + "54392", + "54396", + "54397", + "54453", + "54462", + "54463", + "54467", + "54472", + "54481", + "54493", + "54495", + "54497", + "54499", + "54506", + "54511", + "54515", + "54523", + "54531", + "54532", + "54534", + "54535", + "54547", + "54549", + "54554", + "54565", + "54567", + "54580", + "54584", + "54585", + "54586", + "54599", + "54600", + "54601", + "54602", + "54607", + "54610", + "54615", + "54621", + "54628", + "54631", + "54636", + "54637", + "54640", + "54644", + "54645", + "54652", + "54655", + "54661", + "54669", + "54672", + "54676", + "54680", + "54689", + "54696", + "54700", + "54714", + "54716", + "54719", + "54721", + "54724", + "54729", + "54754", + "54756", + "54757", + "54762", + "54767", + "54769", + "54775", + "54776", + "54780", + "54787", + "54804", + "54812", + "54816", + "54837", + "54838", + "54842", + "54846", + "54847", + "54852", + "54863", + "54865", + "54869", + "54877", + "54888", + "54889", + "54891", + "54902", + "54905", + "54930", + "54931", + "54933", + "54939", + "54940", + "54948", + "54963", + "54964", + "54965", + "54967", + "54979", + "55003", + "55012", + "55016", + "55019", + "55022", + "55023", + "55024", + "55026", + "55038", + "55041", + "55043", + "55079", + "55096", + "55109", + "55116", + "55122", + "55123", + "55128", + "55134", + "55142", + "55145", + "55146", + "55147", + "55152", + "55165", + "55166", + "55182", + "55189", + "55190", + "55194", + "55200", + "55213", + "55222", + "55235", + "55250", + "55253", + "55254", + "55256", + "55261", + "55267", + "55269", + "55271", + "55278", + "55279", + "55281", + "55283", + "55296", + "55309", + "55310", + "55312", + "55315", + "55317", + "55329", + "55340", + "55346", + "55351", + "55352", + "55357", + "55364", + "55366", + "55371", + "55378", + "55379", + "55386", + "55391", + "55395", + "55397", + "55414", + "55419", + "55423", + "55437", + "55439", + "55443", + "55457", + "55465", + "55467", + "55470", + "55476", + "55480", + "55482", + "55503", + "55504", + "55514", + "55515", + "55523", + "55526", + "55537", + "55541", + "55544", + "55551", + "55565", + "55590", + "55592", + "55595", + "55627", + "55635", + "55638", + "55640", + "55642", + "55643", + "55644", + "55656", + "55661", + "55662", + "55668", + "55669", + "55672", + "55675", + "55689", + "55692", + "55715", + "55719", + "55720", + "55723", + "55725", + "55726", + "55728", + "55730", + "55733", + "55736", + "55737", + "55740", + "55751", + "55753", + "55759", + "55762", + "55767", + "55776", + "55785", + "55786", + "55805", + "55806", + "55807", + "55808", + "55822", + "55823", + "55824", + "55832", + "55852", + "55858", + "55860", + "55864", + "55869", + "55871", + "55873", + "55883", + "55884", + "55893", + "55895", + "55905", + "55912", + "55914", + "55923", + "55931", + "55932", + "55938", + "55940", + "55941", + "55942", + "55950", + "55955", + "55963", + "55973", + "55987", + "55991", + "56000", + "56002", + "56004", + "56009", + "56010", + "56013", + "56032", + "56035", + "56037", + "56038", + "56040", + "56057", + "56063", + "56064", + "56066", + "56067", + "56073", + "56074", + "56076", + "56086", + "56088", + "56094", + "56097", + "56110", + "56113", + "56114", + "56123", + "56124", + "56125", + "56142", + "56150", + "56161", + "56174", + "56178", + "56188", + "56191", + "56196", + "56198", + "56203", + "56204", + "56222", + "56227", + "56231", + "56233", + "56234", + "56239", + "56243", + "56244", + "56251", + "56262", + "56269", + "56273", + "56275", + "56276", + "56277", + "56279", + "56280", + "56281", + "56289", + "56301", + "56302", + "56304", + "56310", + "56320", + "56323", + "56333", + "56335", + "56338", + "56342", + "56348", + "56355", + "56357", + "56359", + "56360", + "56362", + "56363", + "56365", + "56376", + "56381", + "56383", + "56385", + "56395", + "56401", + "56405", + "56419", + "56421", + "56425", + "56426", + "56429", + "56433", + "56446", + "56449", + "56461", + "56464", + "56469", + "56474", + "56482", + "56484", + "56488", + "56494", + "56503", + "56504", + "56509", + "56510", + "56512", + "56515", + "56518", + "56520", + "56534", + "56536", + "56537", + "56539", + "56545", + "56546", + "56553", + "56555", + "56567", + "56577", + "56579", + "56589", + "56590", + "56594", + "56608", + "56612", + "56615", + "56630", + "56637", + "56644", + "56645", + "56650", + "56660", + "56670", + "56674", + "56682", + "56685", + "56686", + "56691", + "56692", + "56705", + "56708", + "56711", + "56712", + "56720", + "56724", + "56731", + "56739", + "56741", + "56751", + "56753", + "56766", + "56771", + "56778", + "56781", + "56788", + "56795", + "56796", + "56803", + "56807", + "56814", + "56816", + "56825", + "56836", + "56840", + "56845", + "56877", + "56878", + "56888", + "56890", + "56896", + "56901", + "56903", + "56906", + "56916", + "56921", + "56930", + "56937", + "56940", + "56944", + "56945", + "56949", + "56960", + "56962", + "56969", + "56970", + "56975", + "56976", + "56983", + "56986", + "56991", + "57001", + "57010", + "57016", + "57018", + "57029", + "57036", + "57039", + "57053", + "57058", + "57060", + "57065", + "57067", + "57069", + "57070", + "57073", + "57074", + "57081", + "57085", + "57097", + "57104", + "57123", + "57137", + "57145", + "57146", + "57148", + "57151", + "57166", + "57175", + "57176", + "57180", + "57183", + "57193", + "57198", + "57199", + "57201", + "57206", + "57216", + "57221", + "57223", + "57224", + "57229", + "57233", + "57237", + "57247", + "57253", + "57260", + "57263", + "57277", + "57281", + "57283", + "57288", + "57296", + "57302", + "57313", + "57315", + "57317", + "57322", + "57323", + "57328", + "57329", + "57350", + "57353", + "57358", + "57360", + "57361", + "57362", + "57366", + "57383", + "57392", + "57404", + "57419", + "57420", + "57433", + "57434", + "57435", + "57438", + "57444", + "57456", + "57468", + "57474", + "57480", + "57485", + "57489", + "57500", + "57510", + "57512", + "57532", + "57537", + "57550", + "57559", + "57560", + "57567", + "57572", + "57574", + "57575", + "57579", + "57583", + "57585", + "57586", + "57588", + "57592", + "57602", + "57604", + "57607", + "57612", + "57622", + "57623", + "57626", + "57636", + "57639", + "57640", + "57648", + "57658", + "57660", + "57670", + "57673", + "57674", + "57688", + "57689", + "57692", + "57702", + "57703", + "57707", + "57713", + "57718", + "57729", + "57733", + "57736", + "57744", + "57746", + "57751", + "57752", + "57756", + "57766", + "57771", + "57773", + "57776", + "57791", + "57792", + "57794", + "57804", + "57806", + "57811", + "57814", + "57824", + "57827", + "57829", + "57830", + "57831", + "57838", + "57840", + "57841", + "57843", + "57846", + "57848", + "57863", + "57870", + "57871", + "57877", + "57880", + "57889", + "57895", + "57897", + "57906", + "57915", + "57920", + "57930", + "57933", + "57934", + "57937", + "57938", + "57942", + "57950", + "57952", + "57955", + "57961", + "57964", + "57966", + "57974", + "57979", + "57986", + "57989", + "57996", + "58000", + "58007", + "58008", + "58016", + "58028", + "58040", + "58041", + "58042", + "58059", + "58068", + "58069", + "58080", + "58082", + "58090", + "58097", + "58101", + "58114", + "58116", + "58117", + "58119", + "58124", + "58130", + "58132", + "58137", + "58147", + "58155", + "58158", + "58159", + "58160", + "58165", + "58172", + "58178", + "58179", + "58181", + "58182", + "58187", + "58190", + "58216", + "58227", + "58229", + "58237", + "58248", + "58254", + "58259", + "58275", + "58282", + "58294", + "58297", + "58302", + "58311", + "58316", + "58318", + "58319", + "58321", + "58327", + "58356", + "58369", + "58381", + "58394", + "58395", + "58398", + "58403", + "58404", + "58421", + "58430", + "58434", + "58435", + "58448", + "58453", + "58455", + "58466", + "58469", + "58478", + "58480", + "58486", + "58495", + "58497", + "58499", + "58503", + "58505", + "58507", + "58513", + "58522", + "58523", + "58524", + "58533", + "58535", + "58540", + "58543", + "58551", + "58552", + "58560", + "58586", + "58593", + "58601", + "58602", + "58603", + "58614", + "58618", + "58638", + "58640", + "58644", + "58646", + "58647", + "58654", + "58655", + "58656", + "58658", + "58676", + "58677", + "58678", + "58687", + "58690", + "58692", + "58694", + "58700", + "58706", + "58734", + "58735", + "58738", + "58740", + "58752", + "58761", + "58764", + "58772", + "58776", + "58787", + "58797", + "58815", + "58821", + "58824", + "58832", + "58835", + "58839", + "58840", + "58843", + "58846", + "58854", + "58858", + "58861", + "58865", + "58871", + "58872", + "58887", + "58890", + "58891", + "58908", + "58914", + "58919", + "58924", + "58928", + "58931", + "58939", + "58942", + "58952", + "58954", + "58961", + "58963", + "58965", + "58966", + "58967", + "58974", + "58986", + "59000", + "59003", + "59006", + "59007", + "59016", + "59036", + "59039", + "59046", + "59050", + "59051", + "59054", + "59055", + "59058", + "59059", + "59067", + "59069", + "59070", + "59071", + "59072", + "59074", + "59081", + "59082", + "59085", + "59086", + "59088", + "59092", + "59093", + "59096", + "59099", + "59101", + "59105", + "59113", + "59123", + "59124", + "59130", + "59133", + "59134", + "59135", + "59137", + "59139", + "59141", + "59142", + "59144", + "59147", + "59149", + "59151", + "59153", + "59162", + "59172", + "59179", + "59182", + "59184", + "59200", + "59203", + "59206", + "59213", + "59234", + "59238", + "59239", + "59241", + "59253", + "59257", + "59261", + "59263", + "59269", + "59283", + "59289", + "59291", + "59292", + "59298", + "59299", + "59304", + "59308", + "59310", + "59311", + "59318", + "59320", + "59323", + "59326", + "59327", + "59329", + "59332", + "59334", + "59337", + "59341", + "59342", + "59348", + "59351", + "59353", + "59368", + "59371", + "59386", + "59398", + "59415", + "59417", + "59419", + "59423", + "59443", + "59445", + "59450", + "59453", + "59456", + "59461", + "59465", + "59472", + "59479", + "59480", + "59481", + "59487", + "59501", + "59502", + "59513", + "59521", + "59523", + "59525", + "59537", + "59544", + "59556", + "59561", + "59562", + "59563", + "59567", + "59570", + "59574", + "59581", + "59588", + "59597", + "59600", + "59604", + "59606", + "59608", + "59615", + "59616", + "59633", + "59639", + "59640", + "59644", + "59645", + "59650", + "59654", + "59655", + "59657", + "59664", + "59666", + "59675", + "59676", + "59693", + "59695", + "59719", + "59727", + "59736", + "59747", + "59749", + "59751", + "59754", + "59757", + "59758", + "59766", + "59782", + "59785", + "59794", + "59795", + "59813", + "59821", + "59822", + "59823", + "59825", + "59834", + "59848", + "59858", + "59862", + "59879", + "59881", + "59886", + "59889", + "59892", + "59893", + "59897", + "59900", + "59901", + "59912", + "59922", + "59927", + "59932", + "59933", + "59941", + "59962", + "59966", + "59980", + "59997", + "59999", + "60010", + "60014", + "60020", + "60023", + "60039", + "60052", + "60067", + "60069", + "60075", + "60089", + "60102", + "60105", + "60107", + "60117", + "60119", + "60124", + "60128", + "60135", + "60148", + "60149", + "60154", + "60162", + "60164", + "60171", + "60175", + "60177", + "60183", + "60189", + "60195", + "60200", + "60209", + "60215", + "60218", + "60219", + "60226", + "60233", + "60241", + "60244", + "60245", + "60250", + "60251", + "60269", + "60270", + "60277", + "60280", + "60285", + "60286", + "60288", + "60289", + "60292", + "60301", + "60307", + "60313", + "60317", + "60318", + "60319", + "60322", + "60327", + "60329", + "60334", + "60351", + "60352", + "60355", + "60360", + "60369", + "60395", + "60396", + "60403", + "60407", + "60408", + "60418", + "60419", + "60421", + "60427", + "60428", + "60434", + "60436", + "60442", + "60443", + "60447", + "60456", + "60457", + "60461", + "60462", + "60471", + "60477", + "60479", + "60487", + "60492", + "60503", + "60507", + "60520", + "60529", + "60562", + "60566", + "60573", + "60576", + "60596", + "60604", + "60612", + "60619", + "60621", + "60629", + "60638", + "60651", + "60652", + "60653", + "60655", + "60662", + "60663", + "60667", + "60674", + "60680", + "60683", + "60687", + "60693", + "60696", + "60702", + "60705", + "60708", + "60714", + "60715", + "60726", + "60734", + "60744", + "60751", + "60753", + "60754", + "60757", + "60758", + "60771", + "60784", + "60789", + "60793", + "60802", + "60803", + "60814", + "60818", + "60828", + "60833", + "60837", + "60838", + "60841", + "60852", + "60858", + "60860", + "60864", + "60893", + "60895", + "60898", + "60910", + "60915", + "60919", + "60927", + "60930", + "60938", + "60939", + "60947", + "60950", + "60956", + "60957", + "60960", + "60967", + "60970", + "60972", + "60981", + "60985", + "60996", + "61005", + "61006", + "61008", + "61009", + "76940", + "77544", + "77646", + "77687", + "77845", + "78242", + "78262", + "78420", + "78693", + "79391", + "79432", + "79806", + "79902", + "79974", + "80186", + "80269", + "80294", + "80461", + "80496", + "80865", + "80941", + "80952", + "81038", + "81057", + "81174", + "81392", + "81544", + "81748", + "81939", + "82086", + "82194", + "82215", + "82391", + "82626", + "82763", + "82851", + "82877", + "82894", + "82965", + "83159", + "84447", + "84651", + "84657", + "84769", + "84781", + "84893", + "85046", + "85099", + "85105", + "85284", + "85285", + "85318", + "85457", + "85459", + "85645", + "85730", + "86116", + "86125", + "86243", + "86667", + "86991", + "87027", + "87381", + "87410", + "87424", + "87679", + "87820", + "87844", + "87873", + "87899", + "88232", + "88255", + "88268", + "88321", + "88395", + "88481", + "88566", + "89119", + "89418", + "89545", + "89700", + "89724", + "89760", + "90098", + "90328", + "90523", + "91139", + "91232", + "91457", + "91493", + "91545", + "91676", + "91752", + "91991", + "92215", + "92364", + "92517", + "92591", + "92772", + "92866", + "93049", + "93079", + "93203", + "93680", + "94170", + "94177", + "94351", + "94416", + "94436", + "94465", + "94664", + "95069", + "95673", + "95761", + "95926", + "95988", + "96001", + "96146", + "96307", + "96754", + "96972", + "96976", + "97021", + "97429", + "98083", + "98114", + "98252", + "98294", + "98398", + "98703", + "98784", + "99358", + "99418", + "99478", + "99932", + "99943" + ], + "seed": 42, + "val_ratio": 0.2, + "fusion_type": "lmf", + "loss_type": "sce", + "split": "stratified_group" +} \ No newline at end of file diff --git a/DMS/dinov3_siglip2_lmf_reg/README.md b/DMS/dinov3_siglip2_lmf_reg/README.md new file mode 100644 index 0000000000000000000000000000000000000000..ce654960b543ee39f79b4ab62cf2a5735d2d7c5b --- /dev/null +++ b/DMS/dinov3_siglip2_lmf_reg/README.md @@ -0,0 +1,52 @@ +# DINOv3-SigLIP2 + Low-rank Multimodal Fusion on Apple Dense Material Segmentation + +A material-classification **fusion head** from SegObjectMaterial. It classifies the +material of a masked object from two frozen embeddings: + +| | | +|---|---| +| vision | DINOv3 ViT-L/16 (CLS token, frozen) -> 1024-d | +| language | SigLIP2 base text encoder over Qwen3-VL-8B captions (frozen) -> 768-d | +| head | Low-rank Multimodal Fusion (`lmf`, rank=4, hidden_dim=256, modality_dropout=0.2), 1,922,365 parameters | +| classes | 57 (Apple Dense Material Segmentation) | + +**This repo holds only the head.** Features must come from the same encoders, +captioner and prompts as training (see the SegObjectMaterial repository); the +encoders are downloaded from their own model pages under their own licenses. + +## Evaluation + +Held-out split recorded in `split.json` (source images never seen in training). +Single training run -- differences under ~0.5 mIoU points between heads are within +run-to-run noise. + +| mIoU | mAcc | eval samples | +|---|---|---| +| 0.4453 | 0.6135 | 186,231 | + +## Training + +```json +{ + "learning_rate": 5e-05, + "epochs": 50, + "batch_size": 32, + "weight_decay": 0.01, + "lr_schedule": "cosine", + "early_stopping_patience": 10, + "checkpoint": "best validation loss" +} +``` + +## Use + +```python +from utils.hub import load_head_from_hub # SegObjectMaterial repository +head, info = load_head_from_hub("s0um0r0y/SegObjectMaterial", "DMS/dinov3_siglip2_lmf_reg") +logits = head(vision_features, language_features) # [B, 1024], [B, 768] +``` + +## Integrity + +- `model.safetensors` sha256 `ed2fc3b7ee4dd92b575b199ea2770e3a0e0d702355dfe5f97216e50917c68cab` +- source config `config/config_latest_models_lmf_reg.toml`, code commit `1a8130c922267fb0786a33e3854a7e00763cc38f+dirty` diff --git a/DMS/dinov3_siglip2_lmf_reg/config.toml b/DMS/dinov3_siglip2_lmf_reg/config.toml new file mode 100644 index 0000000000000000000000000000000000000000..018cefc84a5a46ffe7288e8cda3a3e70a48addc9 --- /dev/null +++ b/DMS/dinov3_siglip2_lmf_reg/config.toml @@ -0,0 +1,89 @@ +# REGULARISED LMF run: config_latest_models_lmf.toml + modality dropout 0.2, +# weight decay 1e-2, cosine LR and early stopping. Same cache; own checkpoint. +# Compare against config_latest_models_gated_reg.toml (same recipe, gated head). + +# LMF-head twin of config/config.toml. +# SAME embedding cache -- the head type does not change the cached features, so +# nothing needs re-serializing. Only the checkpoint, TensorBoard dir and W&B run +# differ, so this run can never overwrite the gated or mlp checkpoints. + +# Apple DMS -- LATEST-MODELS pipeline: DINOv3 ViT-L/16 (1024) + Qwen3-VL -> SigLIP2 text (768) +# +# Pair this with: +# src/vision_stream_latest_models.py + src/language_stream_latest_models.py +# run_serialization_latest_models.py -> train_latest_models.py +# +# For the base DINOv2/CLIP pipeline (run_serialization.py -> train.py) use +# config/config_dinov2_clip.toml instead -- its vision_dim is 768, not 1024. + +[data] +dataset_type = "apple_dms" +image_dir = "/images" +mask_dir = "/labels" +# Rebuilt automatically on first run; the index now stores one entry per +# CONNECTED COMPONENT, so any pre-existing labels.json must be removed first. +labels_file = "/labels_instances.json" +# Separate cache: DINOv3 features are 1024-d and must not mix with the +# 768-d DINOv2 cache written by run_serialization.py. +tensor_cache_dir = "/tensor_cache_dir_latest_models" + +# Connected-component filtering (measured on 400 real DMS masks): +# keeping every component gives 7.5x more samples than the old per-(image,class) +# scheme -- 2.45M samples / 47 GB / ~7.5x the VLM captioning time -- because 69% +# of components are under 0.1% of the frame and crop to a few pixels. +# A component is kept when area >= max(min_instance_area, min_instance_frac * frame). +min_instance_area = 1000 # absolute pixel floor +min_instance_frac = 0.001 # and at least 0.1% of the frame +max_instances_per_class = 0 # 0 = keep all; set e.g. 3 to cap the long tail + + +[model] +# fusion head: "lmf" = low-rank multimodal fusion (src/fusion_classifier.py, +# LowRankFusionHead). Read by train_latest_models.py; a contradicting --fusion +# flag is an error, so checkpoint_path can't hold the wrong head. +fusion = "lmf" +vision_dim = 1024 # DINOv3 ViT-L/16 CLS token +language_dim = 768 # SigLIP2 base text embedding +num_classes = 57 + +# LMF hyperparameters. rank 4 x hidden 256 = ~1.84M fusion parameters, close to +# the gated head (~1.97M), so gated-vs-lmf compares the fusion operator rather +# than model size. Both are read back from the checkpoint at load time, so +# evaluate/inference scripts need no extra flags. +lmf_rank = 4 +lmf_hidden = 256 +# Fraction of training samples with ONE stream zeroed (half vision, half +# language). 0.0 = plain LMF, as in the paper. Try 0.2 as a second run: it +# forces the head to work from either stream alone. +modality_dropout = 0.2 + +[training] +batch_size = 32 + +# Batch size for the OFFLINE SERIALIZATION pass, which is a completely different +# memory regime from training: it pushes full-resolution images through the 7B +# VLM, whereas [training].batch_size only moves cached 768-d vectors through a +# small MLP. Measured on the 23.6 GiB 4090 -- static weights 16.2 GiB, so only +# ~7.4 GiB is left: batch 8 peaks at 17.7 GiB, 16 at 19.2 GiB, and 32 OOMs. +# 8 leaves headroom for a labmate's job to coexist; raise to 16 on a free card. +serialization_batch_size = 8 +learning_rate = 5e-5 +epochs = 50 +train_ratio = 0.8 # 80% for training +val_ratio = 0.2 # 20% for validation +tensorboard_log_dir = "/dms_dinov3_siglip2_lmf_reg" + +# ---- regularisation / schedule (train_latest_models.py; all optional) ---- +# The baseline runs (wd 1e-4, constant LR, 50 epochs) overfit on DMS: val loss +# bottomed at epoch 13-15 and then rose while train accuracy kept climbing. +weight_decay = 1e-2 # was 1e-4 (the default when this key is absent) +lr_schedule = "cosine" # "constant" (default) | "cosine", stepped per epoch over `epochs` +min_lr = 1e-6 # cosine floor +early_stopping_patience = 10 # stop after 8 epochs without val-loss improvement; 0 = off + +[inference] +checkpoint_path = "/best_model_dms_latest_lmf_reg.pth" + +[logging] +wandb_project = "material-classification" +wandb_run_name = "dms-dinov3-siglip2-lmf-reg" diff --git a/DMS/dinov3_siglip2_lmf_reg/head.json b/DMS/dinov3_siglip2_lmf_reg/head.json new file mode 100644 index 0000000000000000000000000000000000000000..48ce703923330a6abbc0f921147e3f4702234798 --- /dev/null +++ b/DMS/dinov3_siglip2_lmf_reg/head.json @@ -0,0 +1,103 @@ +{ + "fusion": "lmf", + "head": "Low-rank Multimodal Fusion", + "head_kwargs": { + "rank": 4, + "hidden_dim": 256, + "modality_dropout": 0.2 + }, + "vision_dim": 1024, + "language_dim": 768, + "num_classes": 57, + "classes": [ + "No label", + "Animal skin", + "Bone/teeth/horn", + "Brickwork", + "Cardboard", + "Carpet/rug", + "Ceiling tile", + "Ceramic", + "Chalkboard/blackboard", + "Clutter", + "Concrete", + "Cork/corkboard", + "Engineered stone", + "Fabric/cloth", + "Fiberglass wool", + "Fire", + "Foliage", + "Food", + "Fur", + "Gemstone/quartz", + "Glass", + "Hair", + "I cannot tell", + "Ice", + "Leather", + "Liquid, non-water", + "Metal", + "Mirror", + "Not on list", + "Paint/plaster/enamel", + "Paper", + "Pearl", + "Photograph/painting", + "Plastic, clear", + "Plastic, non-clear", + "Rubber/latex", + "Sand", + "Skin/lips", + "Sky", + "Snow", + "Soap", + "Soil/mud", + "Sponge", + "Stone, natural", + "Stone, polished", + "Styrofoam", + "Tile", + "Wallpaper", + "Water", + "Wax", + "Whiteboard", + "Wicker", + "Wood", + "Wood, tree", + "Bad polygon", + "Multiple materials", + "Asphalt" + ], + "dataset": "Apple Dense Material Segmentation", + "dataset_key": "DMS", + "encoders": { + "vision": "DINOv3 ViT-L/16 (CLS token, frozen)", + "language": "SigLIP2 base text encoder over Qwen3-VL-8B captions (frozen)", + "short": "DINOv3-SigLIP2", + "slug": "dinov3_siglip2" + }, + "parameters": 1922365, + "training": { + "learning_rate": 5e-05, + "epochs": 50, + "batch_size": 32, + "weight_decay": 0.01, + "lr_schedule": "cosine", + "early_stopping_patience": 10, + "checkpoint": "best validation loss" + }, + "sha256": { + "safetensors": "ed2fc3b7ee4dd92b575b199ea2770e3a0e0d702355dfe5f97216e50917c68cab", + "pth": "fcbfcb811c95b16bba82f2765cc37aeb0861ea6067e559a36c605bfdc24f1ba0" + }, + "source": { + "config": "config/config_latest_models_lmf_reg.toml", + "git_commit": "1a8130c922267fb0786a33e3854a7e00763cc38f+dirty", + "checkpoint_mtime": "2026-10-07T17:11:52" + }, + "metrics": { + "mIoU": 0.4453273662621192, + "mAcc": 0.6135327722998756, + "eval_samples": 186231 + } +} \ No newline at end of file diff --git a/DMS/dinov3_siglip2_lmf_reg/metrics.json b/DMS/dinov3_siglip2_lmf_reg/metrics.json new file mode 100644 index 0000000000000000000000000000000000000000..dee74f5e2d275570b6527cec541f2d891b42d67e --- /dev/null +++ b/DMS/dinov3_siglip2_lmf_reg/metrics.json @@ -0,0 +1,296 @@ +{ + "dataset": "DMS", + "config": "config/config_latest_models_lmf_reg.toml", + "checkpoint": "/best_model_dms_latest_lmf_reg.pth", + "fusion_type": "lmf", + "num_eval_samples": 186231, + "mIoU": 0.4453273662621192, + "mAcc": 0.6135327722998756, + "per_class": { + "No label": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Animal skin": { + "accuracy": 0.5526315789473685, + "iou": 0.37058823529411766, + "support": 114 + }, + "Bone/teeth/horn": { + "accuracy": 0.6818181818181818, + "iou": 0.6122448979591837, + "support": 44 + }, + "Brickwork": { + "accuracy": 0.7462019660411081, + "iou": 0.4979129397734049, + "support": 1119 + }, + "Cardboard": { + "accuracy": 0.7360703812316716, + "iou": 0.4944189100459619, + "support": 1023 + }, + "Carpet/rug": { + "accuracy": 0.7937183383991895, + "iou": 0.46300236406619383, + "support": 4935 + }, + "Ceiling tile": { + "accuracy": 0.7847082494969819, + "iou": 0.4701627486437613, + "support": 994 + }, + "Ceramic": { + "accuracy": 0.8235037134119703, + "iou": 0.5771586037966931, + "support": 2289 + }, + "Chalkboard/blackboard": { + "accuracy": 0.7534883720930232, + "iou": 0.552901023890785, + "support": 215 + }, + "Clutter": { + "accuracy": 0.4339622641509434, + "iou": 0.359375, + "support": 53 + }, + "Concrete": { + "accuracy": 0.5151148730350665, + "iou": 0.2623152709359606, + "support": 1654 + }, + "Cork/corkboard": { + "accuracy": 0.29411764705882354, + "iou": 0.18518518518518517, + "support": 51 + }, + "Engineered stone": { + "accuracy": 0.20224719101123595, + "iou": 0.15384615384615385, + "support": 89 + }, + "Fabric/cloth": { + "accuracy": 0.7728515969648844, + "iou": 0.7065537406735228, + "support": 22668 + }, + "Fiberglass wool": { + "accuracy": 0.3, + "iou": 0.24, + "support": 20 + }, + "Fire": { + "accuracy": 0.76, + "iou": 0.5757575757575758, + "support": 50 + }, + "Foliage": { + "accuracy": 0.8998444185141968, + "iou": 0.7700116491928773, + "support": 5142 + }, + "Food": { + "accuracy": 0.8614525139664805, + "iou": 0.622778675282714, + "support": 895 + }, + "Fur": { + "accuracy": 0.8259860788863109, + "iou": 0.6819923371647509, + "support": 431 + }, + "Gemstone/quartz": { + "accuracy": 0.54, + "iou": 0.1956521739130435, + "support": 50 + }, + "Glass": { + "accuracy": 0.7519200887902331, + "iou": 0.6554820232981152, + "support": 22525 + }, + "Hair": { + "accuracy": 0.975366568914956, + "iou": 0.9131091283459163, + "support": 6820 + }, + "I cannot tell": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Ice": { + "accuracy": 0.41818181818181815, + "iou": 0.35384615384615387, + "support": 55 + }, + "Leather": { + "accuracy": 0.697282099343955, + "iou": 0.4206955046649703, + "support": 2134 + }, + "Liquid, non-water": { + "accuracy": 0.4166666666666667, + "iou": 0.26785714285714285, + "support": 36 + }, + "Metal": { + "accuracy": 0.8197604132322234, + "iou": 0.5327476608813656, + "support": 9099 + }, + "Mirror": { + "accuracy": 0.6637390213299874, + "iou": 0.40350877192982454, + "support": 797 + }, + "Not on list": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Paint/plaster/enamel": { + "accuracy": 0.5977813393670847, + "iou": 0.5230278533916247, + "support": 31821 + }, + "Paper": { + "accuracy": 0.8264638245179551, + "iou": 0.6788724208079047, + "support": 11306 + }, + "Pearl": { + "accuracy": 0.0, + "iou": 0.0, + "support": 1 + }, + "Photograph/painting": { + "accuracy": 0.6998202516476932, + "iou": 0.36671899529042384, + "support": 1669 + }, + "Plastic, clear": { + "accuracy": 0.6641744548286604, + "iou": 0.42554890219560876, + "support": 1605 + }, + "Plastic, non-clear": { + "accuracy": 0.6261146496815286, + "iou": 0.5067590789322947, + "support": 14130 + }, + "Rubber/latex": { + "accuracy": 0.581547064305685, + "iou": 0.31060228969636633, + "support": 1073 + }, + "Sand": { + "accuracy": 0.29545454545454547, + "iou": 0.23853211009174313, + "support": 88 + }, + "Skin/lips": { + "accuracy": 0.9690329131060157, + "iou": 0.9340238134072745, + "support": 11819 + }, + "Sky": { + "accuracy": 0.9326833797585887, + "iou": 0.6621621621621622, + "support": 2154 + }, + "Snow": { + "accuracy": 0.6788990825688074, + "iou": 0.5211267605633803, + "support": 109 + }, + "Soap": { + "accuracy": 0.14285714285714285, + "iou": 0.14285714285714285, + "support": 7 + }, + "Soil/mud": { + "accuracy": 0.634703196347032, + "iou": 0.3926553672316384, + "support": 657 + }, + "Sponge": { + "accuracy": 0.1111111111111111, + "iou": 0.09090909090909091, + "support": 18 + }, + "Stone, natural": { + "accuracy": 0.6101556101556102, + "iou": 0.4328878558977339, + "support": 1221 + }, + "Stone, polished": { + "accuracy": 0.41022280471821754, + "iou": 0.25385239253852393, + "support": 763 + }, + "Styrofoam": { + "accuracy": 0.0, + "iou": 0.0, + "support": 31 + }, + "Tile": { + "accuracy": 0.6326317620455731, + "iou": 0.4346838771363691, + "support": 5749 + }, + "Wallpaper": { + "accuracy": 0.5758928571428571, + "iou": 0.33740191804707936, + "support": 672 + }, + "Water": { + "accuracy": 0.6458569807037458, + "iou": 0.5158658204895739, + "support": 881 + }, + "Wax": { + "accuracy": 0.8333333333333334, + "iou": 0.6129032258064516, + "support": 114 + }, + "Whiteboard": { + "accuracy": 0.6366366366366366, + "iou": 0.4491525423728814, + "support": 333 + }, + "Wicker": { + "accuracy": 0.7818181818181819, + "iou": 0.5789473684210527, + "support": 605 + }, + "Wood": { + "accuracy": 0.7983939413723314, + "iou": 0.6174079870752764, + "support": 15317 + }, + "Wood, tree": { + "accuracy": 0.717687074829932, + "iou": 0.49414519906323184, + "support": 588 + }, + "Bad polygon": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Multiple materials": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Asphalt": { + "accuracy": 0.4797979797979798, + "iou": 0.296875, + "support": 198 + } + } +} \ No newline at end of file diff --git a/DMS/dinov3_siglip2_lmf_reg/model.pth b/DMS/dinov3_siglip2_lmf_reg/model.pth new file mode 100644 index 0000000000000000000000000000000000000000..a4f3137ed50d531e2f006ed56b33f3da192b4de4 --- /dev/null +++ b/DMS/dinov3_siglip2_lmf_reg/model.pth @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fcbfcb811c95b16bba82f2765cc37aeb0861ea6067e559a36c605bfdc24f1ba0 +size 7701584 diff --git a/DMS/dinov3_siglip2_lmf_reg/model.safetensors b/DMS/dinov3_siglip2_lmf_reg/model.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..6d42cefbc25cdfe92727113c2b32425775700f93 --- /dev/null +++ b/DMS/dinov3_siglip2_lmf_reg/model.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed2fc3b7ee4dd92b575b199ea2770e3a0e0d702355dfe5f97216e50917c68cab +size 7695412 diff --git a/DMS/dinov3_siglip2_lmf_reg/split.json b/DMS/dinov3_siglip2_lmf_reg/split.json new file mode 100644 index 0000000000000000000000000000000000000000..05e75c90cb0ee1c25b0f32052575f187f9cdb612 --- /dev/null +++ b/DMS/dinov3_siglip2_lmf_reg/split.json @@ -0,0 +1,8271 @@ +{ + "val_groups": [ + "100023", + "100684", + "100767", + "100806", + "101108", + "101397", + "101542", + "101771", + "102242", + "102298", + "102300", + "102441", + "102723", + "102859", + "102949", + "103045", + "103061", + "103310", + "103351", + "103376", + "103416", + "103494", + "103686", + "103990", + "104894", + "104911", + "104917", + "105053", + "105099", + "105227", + "105355", + "105416", + "105696", + "106358", + "106446", + "106475", + "106484", + "106527", + "106788", + "106933", + "107102", + "107279", + "107305", + "107566", + "107782", + "107866", + "108158", + "108647", + "109239", + "109695", + "109726", + "109789", + "109812", + "109881", + "109999", + "110235", + "110322", + "110893", + "111049", + "111228", + "111280", + "111386", + "112424", + "112448", + "112457", + "112665", + "112857", + "113143", + "113524", + "113793", + "113890", + "114202", + "114224", + "114225", + "114241", + "114705", + "114774", + "115020", + "115498", + "115499", + "115760", + "116168", + "116191", + "116298", + "116449", + "116606", + "116733", + "117104", + "117266", + "117505", + "117707", + "118431", + "119280", + "119283", + "119321", + "119466", + "119521", + "119533", + "119783", + "119809", + "119974", + "120020", + "120125", + "120312", + "120531", + "120550", + "120678", + "120808", + "121071", + "121220", + "121316", + "121985", + "122087", + "122094", + "122153", + "122404", + "122550", + "122844", + "122964", + "123297", + "123381", + "123445", + "123516", + "123601", + "123649", + "123702", + "124102", + "124157", + "124466", + "124752", + "125018", + "125522", + "125549", + "125597", + "125898", + "125979", + "125983", + "126186", + "126431", + "126648", + "126667", + "126907", + "126987", + "127294", + "127355", + "127396", + "127586", + "127669", + "127714", + "127973", + "128106", + "128229", + "128646", + "128868", + "129361", + "129605", + "129853", + "129906", + "129979", + "130273", + "130677", + "130702", + "130741", + "130972", + "131016", + "131115", + "131213", + "131299", + "131561", + "131598", + "131633", + "131677", + "132112", + "132235", + "132287", + "132495", + "132522", + "132602", + "132652", + "132730", + "132957", + "132980", + "133073", + "133187", + "133299", + "133571", + "133998", + "134034", + "134536", + "134647", + "134744", + "134773", + "134830", + "134835", + "134865", + "135254", + "135261", + "135282", + "135490", + "135709", + "136113", + "136415", + "136496", + "136599", + "136677", + "136726", + "136786", + "136847", + "136869", + "136995", + "137430", + "137533", + "137955", + "138677", + "138726", + "139100", + "139408", + "139623", + "139650", + "139653", + "139721", + "139748", + "139977", + "140398", + "140499", + "140727", + "140777", + "141064", + "141182", + "141248", + "141855", + "142040", + "142358", + "142418", + "142569", + "142763", + "142787", + "143098", + "143149", + "143193", + "143481", + "143614", + "143630", + "143668", + "143688", + "143821", + "143884", + "144224", + "144530", + "144759", + "144762", + "144978", + "145373", + "145421", + "145538", + "147431", + "147459", + "147723", + "147858", + "147868", + "148109", + "148756", + "148810", + "148826", + "149253", + "149401", + "149468", + "150308", + "150382", + "150544", + "150565", + "150607", + "150935", + "151054", + "151243", + "151309", + "151551", + "151581", + "151726", + "151871", + "152161", + "152558", + "152760", + "152845", + "153056", + "153383", + "153617", + "153763", + "154293", + "154636", + "154681", + "154850", + "154873", + "154992", + "155063", + "155394", + "155444", + "155476", + "155920", + "156257", + "156261", + "156366", + "156674", + "157619", + "157688", + "157961", + "158086", + "158156", + "158202", + "158423", + "158990", + "159370", + "159801", + "159862", + "159919", + "159957", + "160451", + "160464", + "160982", + "161162", + "161331", + "161519", + "161576", + "161866", + "162020", + "162036", + "162092", + "162306", + "162549", + "162678", + "162798", + "163001", + "163039", + "163164", + "163254", + "163444", + "163517", + "163613", + "163825", + "163860", + "164018", + "164101", + "164713", + "164795", + "164989", + "165403", + "165521", + "165722", + "165988", + "166002", + "166374", + "166659", + "166714", + "166951", + "167223", + "167462", + "167493", + "167663", + "167917", + "168095", + "168127", + "168694", + "168971", + "169649", + "169674", + "169728", + "169817", + "169838", + "170025", + "170807", + "170875", + "170998", + "171186", + "171219", + "171460", + "171626", + "171726", + "172073", + "172138", + "172222", + "172488", + "172575", + "172763", + "172830", + "172960", + "173232", + "173248", + "173732", + "174439", + "174449", + "174521", + "174666", + "175176", + "175266", + "175356", + "175504", + "175844", + "175887", + "176175", + "176211", + "176255", + "176296", + "176375", + "176444", + "176998", + "177058", + "177108", + "177336", + "177473", + "177536", + "177680", + "177701", + "178063", + "178199", + "178270", + "178278", + "178421", + "178454", + "178973", + "179168", + "179264", + "179369", + "179600", + "179943", + "180839", + "181026", + "181157", + "181763", + "181990", + "182089", + "182267", + "182568", + "182583", + "182605", + "182793", + "182840", + "183009", + "183268", + "183662", + "183829", + "183932", + "184491", + "184676", + "184770", + "184802", + "184841", + "184892", + "185054", + "185101", + "185117", + "185165", + "185298", + "185316", + "185777", + "186172", + "186197", + "186424", + "186481", + "186585", + "186719", + "186902", + "187744", + "187814", + "187894", + "188066", + "188085", + "188778", + "189232", + "189269", + "189397", + "189485", + "189490", + "189519", + "189574", + "189751", + "190146", + "190176", + "190206", + "190249", + "190250", + "190332", + "190448", + "190477", + "190569", + "191141", + "191237", + "191400", + "191635", + "192431", + "192460", + "192557", + "192778", + "192831", + "192947", + "193267", + "193325", + "193358", + "193365", + "193374", + "193387", + "193490", + "193566", + "193574", + "193637", + "193681", + "193728", + "193737", + "193811", + "193844", + "193941", + "194054", + "194063", + "194154", + "194170", + "194195", + "194240", + "194254", + "194268", + "194280", + "194303", + "194351", + "194418", + "194489", + "194561", + "194594", + "194597", + "194642", + "194676", + "194688", + "194711", + "194735", + "194800", + "194803", + "194811", + "194814", + "194828", + "194992", + "195013", + "195016", + "195035", + "195196", + "195230", + "195238", + "195296", + "195299", + "195348", + "195405", + "195408", + "195421", + "195475", + "195509", + "195526", + "195535", + "195569", + "195618", + "195638", + "195663", + "195705", + "195709", + "195714", + "195736", + "195789", + "195791", + "195803", + "195804", + "195807", + "195829", + "195831", + "195900", + "195926", + "195938", + "195943", + "195951", + "196009", + "196030", + "196046", + "196126", + "196127", + "196165", + "196221", + "196266", + "196286", + "196293", + "196342", + "196348", + "196369", + "196391", + "196448", + "196476", + "196503", + "196528", + "196529", + "196580", + "196584", + "196604", + "196613", + "196640", + "196641", + "196692", + "196705", + "196730", + "196805", + "196815", + "196850", + "196861", + "196872", + "196888", + "196925", + "196927", + "196981", + "196988", + "196990", + "197034", + "197065", + "197078", + "197087", + "197108", + "197149", + "197206", + "197251", + "197258", + "197263", + "197269", + "197282", + "197290", + "197308", + "197323", + "197348", + "197351", + "197380", + "197432", + "197467", + "197468", + "197516", + "197616", + "197632", + "197687", + "197717", + "197730", + "197781", + "197788", + "197835", + "197884", + "197910", + "197982", + "198031", + "198034", + "198126", + "198132", + "198202", + "198298", + "198314", + "198324", + "198328", + "198348", + "198442", + "198491", + "198550", + "198552", + "198577", + "198585", + "198625", + "198681", + "198690", + "198695", + "198697", + "198706", + "198712", + "198721", + "198724", + "198730", + "198732", + "198767", + "198815", + "198825", + "198907", + "198950", + "198969", + "199023", + "199034", + "199207", + "199245", + "199256", + "199271", + "199309", + "199370", + "199386", + "199396", + "199410", + "199461", + "199477", + "199486", + "199693", + "199733", + "199768", + "199796", + "199832", + "199855", + "199896", + "199910", + "199923", + "199933", + "199947", + "200017", + "200043", + "200108", + "200127", + "200152", + "200170", + "200238", + "200272", + "200309", + "200315", + "200342", + "200413", + "200443", + "200461", + "200551", + "200611", + "200639", + "200647", + "200663", + "200669", + "200692", + "200720", + "200757", + "200765", + "200768", + "200775", + "200803", + "200808", + "200889", + "200896", + "200897", + "200922", + "200983", + "200986", + "201005", + "201020", + "201045", + "201048", + "201113", + "201154", + "201187", + "201234", + "201243", + "201249", + "201284", + "201292", + "201347", + "201388", + "201410", + "201454", + "201497", + "201554", + "201559", + "201591", + "201614", + "201691", + "201754", + "201771", + "201808", + "201852", + "201856", + "201909", + "201913", + "201920", + "201941", + "201977", + "202005", + "202034", + "202120", + "202201", + "202218", + "202236", + "202253", + "202276", + "202307", + "202321", + "202324", + "202377", + "202382", + "202454", + "202490", + "202499", + "202531", + "202546", + "202567", + "202582", + "202630", + "202645", + "202702", + "202771", + "202777", + "202814", + "202873", + "202876", + "202898", + "202942", + "203001", + "203025", + "203044", + "203076", + "203174", + "203226", + "203232", + "203237", + "203240", + "203339", + "203343", + "203372", + "203392", + "203401", + "203416", + "203463", + "203486", + "203515", + "203775", + "203842", + "203844", + "203996", + "204003", + "204018", + "204032", + "204040", + "204104", + "204108", + "204179", + "204182", + "204197", + "204211", + "204212", + "204223", + "204250", + "204271", + "204398", + "204441", + "204448", + "204488", + "204489", + "204497", + "204499", + "204590", + "204628", + "204667", + "204710", + "204790", + "204797", + "204847", + "204850", + "204895", + "204999", + "205044", + "205054", + "205061", + "205093", + "205162", + "205171", + "205189", + "205193", + "205224", + "205245", + "205256", + "205317", + "205353", + "205483", + "205626", + "205646", + "205656", + "205701", + "205732", + "205754", + "205800", + "205846", + "205858", + "205859", + "205901", + "205942", + "205954", + "206023", + "206042", + "206076", + "206132", + "206233", + "206237", + "206249", + "206259", + "206272", + "206331", + "206376", + "206506", + "206545", + "206566", + "206568", + "206577", + "206592", + "206625", + "206773", + "206848", + "206919", + "206930", + "206938", + "206960", + "206963", + "206966", + "207000", + "207006", + "207014", + "207058", + "207081", + "207082", + "207129", + "207140", + "207167", + "207266", + "207283", + "207329", + "207347", + "207351", + "207481", + "207504", + "207554", + "207575", + "207701", + "207735", + "207754", + "207756", + "207757", + "207765", + "207768", + "207789", + "207814", + "207885", + "207888", + "207923", + "207933", + "207938", + "207955", + "207971", + "208023", + "208152", + "208159", + "208160", + "208171", + "208187", + "208201", + "208429", + "208441", + "208468", + "208497", + "208513", + "208532", + "208534", + "208555", + "208578", + "208592", + "208610", + "208625", + "208663", + "208680", + "208690", + "208694", + "208702", + "208723", + "208848", + "208856", + "208864", + "208885", + "208900", + "208924", + "208967", + "208968", + "209081", + "209085", + "209114", + "209174", + "209214", + "209221", + "209313", + "209367", + "209388", + "209396", + "209406", + "209415", + "209430", + "209438", + "209615", + "209653", + "209701", + "209709", + "209726", + "209737", + "209746", + "209753", + "209760", + "209765", + "209792", + "209796", + "209812", + "209823", + "209860", + "209861", + "209895", + "209901", + "209905", + "209932", + "209996", + "210064", + "210160", + "210197", + "210227", + "210229", + "210235", + "210318", + "210331", + "210341", + "210344", + "210353", + "210398", + "210399", + "210465", + "210466", + "210469", + "210473", + "210525", + "210540", + "210567", + "210581", + "210601", + "210668", + "210687", + "210762", + "210796", + "210818", + "210904", + "210930", + "210933", + "210967", + "210996", + "211023", + "211044", + "211069", + "211096", + "211101", + "211108", + "211155", + "211212", + "211268", + "211329", + "211356", + "211531", + "211537", + "211550", + "211595", + "211596", + "211629", + "211664", + "211684", + "211715", + "211752", + "211785", + "211854", + "211859", + "211880", + "211929", + "211937", + "211973", + "211974", + "212055", + "212093", + "212149", + "212153", + "212251", + "212302", + "212366", + "212523", + "212528", + "212559", + "212580", + "212628", + "212696", + "212740", + "212915", + "212956", + "212969", + "212975", + "213064", + "213065", + "213109", + "213113", + "213213", + "213254", + "213365", + "213375", + "213380", + "213385", + "213394", + "213400", + "213503", + "213514", + "213524", + "213534", + "213551", + "213601", + "213636", + "213651", + "213664", + "213737", + "213778", + "213792", + "213816", + "213854", + "213855", + "213871", + "213880", + "213884", + "213996", + "214128", + "214181", + "214188", + "214193", + "214212", + "214272", + "214310", + "214329", + "214331", + "214347", + "214420", + "214434", + "214443", + "214469", + "214481", + "214515", + "214562", + "214633", + "214669", + "214696", + "214701", + "214717", + "214745", + "214779", + "214807", + "214830", + "214921", + "214927", + "214931", + "214990", + "215005", + "215024", + "215076", + "215099", + "215116", + "215172", + "215175", + "215181", + "215196", + "215215", + "215253", + "215308", + "215323", + "215330", + "215373", + "215435", + "215440", + "215479", + "215491", + "215533", + "215583", + "215584", + "215687", + "215693", + "215706", + "215718", + "215778", + "215807", + "215838", + "215859", + "215877", + "215924", + "215935", + "215945", + "215951", + "216020", + "216026", + "216033", + "216040", + "216069", + "216081", + "216174", + "216193", + "216196", + "216207", + "216328", + "216343", + "216430", + "216444", + "216445", + "216497", + "216500", + "216511", + "216513", + "216535", + "216765", + "216967", + "217059", + "217065", + "217076", + "217147", + "217151", + "217155", + "217181", + "217326", + "217363", + "217381", + "217412", + "217475", + "217476", + "217534", + "217565", + "217568", + "217645", + "217660", + "217675", + "217740", + "217779", + "217808", + "217830", + "217858", + "217878", + "217884", + "217908", + "217914", + "217956", + "218062", + "218063", + "218134", + "218137", + "218142", + "218173", + "218178", + "218198", + "218240", + "218281", + "218294", + "218350", + "218373", + "218385", + "218400", + "218425", + "218435", + "218475", + "218502", + "218582", + "218675", + "218687", + "218717", + "218722", + "218781", + "218833", + "218841", + "218944", + "218981", + "218985", + "219032", + "219037", + "219062", + "219065", + "219085", + "219150", + "219165", + "219246", + "219263", + "219295", + "219324", + "219332", + "219381", + "219390", + "219425", + "219454", + "219458", + "219459", + "219475", + "219485", + "219561", + "219619", + "219626", + "219641", + "219665", + "219693", + "219696", + "219740", + "219754", + "219763", + "219799", + "219807", + "219880", + "219958", + "220010", + "220046", + "220081", + "220118", + "220130", + "220140", + "220198", + "220227", + "220318", + "220326", + "220349", + "220391", + "220407", + "220408", + "220419", + "220453", + "220458", + "220471", + "220473", + "220474", + "220477", + "220485", + "220518", + "220539", + "220551", + "220553", + "220572", + "220647", + "220649", + "220653", + "220669", + "220781", + "220787", + "220809", + "220880", + "220898", + "220946", + "220968", + "220984", + "220992", + "221029", + "221030", + "221074", + "221112", + "221125", + "221176", + "221184", + "221221", + "221248", + "221277", + "221305", + "221314", + "221382", + "221400", + "221412", + "221448", + "221454", + "221470", + "221485", + "221489", + "221495", + "221505", + "221562", + "221583", + "221605", + "221606", + "221721", + "221733", + "221763", + "221773", + "221792", + "221799", + "221923", + "222027", + "222127", + "222131", + "222143", + "222191", + "222222", + "222268", + "222269", + "222332", + "222447", + "222449", + "222475", + "222498", + "222520", + "222532", + "222535", + "222560", + "222681", + "222719", + "222759", + "222817", + "222819", + "222828", + "222855", + "222966", + "222979", + "223064", + "223077", + "223106", + "223163", + "223178", + "223189", + "223194", + "223218", + "223289", + "223294", + "223311", + "223318", + "223321", + "223397", + "223401", + "223416", + "223418", + "223462", + "223476", + "223510", + "223543", + "223552", + "223662", + "223673", + "223691", + "223723", + "223838", + "223885", + "223895", + "223918", + "223928", + "223930", + "223933", + "223966", + "224017", + "224022", + "224116", + "224119", + "224172", + "224259", + "224302", + "224328", + "224379", + "224390", + "224409", + "224440", + "224443", + "224457", + "224483", + "224485", + "224496", + "224499", + "224525", + "224537", + "224538", + "224543", + "224549", + "224566", + "224596", + "224614", + "224701", + "224714", + "224754", + "224776", + "224781", + "224830", + "224891", + "22501", + "225044", + "22506", + "225063", + "22507", + "225082", + "225138", + "225162", + "225192", + "225232", + "22524", + "225253", + "225266", + "22527", + "225274", + "22530", + "225303", + "225311", + "225319", + "225327", + "225346", + "22535", + "22537", + "22541", + "225413", + "225428", + "22543", + "225442", + "225473", + "225497", + "225550", + "22556", + "225576", + "22558", + "225618", + "22564", + "22565", + "225688", + "225706", + "22572", + "22574", + "22575", + "225762", + "225766", + "22578", + "22580", + "225846", + "22585", + "225871", + "225907", + "22594", + "225968", + "225989", + "225990", + "22600", + "226008", + "22601", + "22603", + "226059", + "22606", + "226096", + "22611", + "226117", + "226202", + "226230", + "226302", + "22633", + "226336", + "22634", + "226398", + "22641", + "22642", + "226429", + "226448", + "226481", + "226488", + "226491", + "226511", + "226533", + "226566", + "22658", + "226583", + "226586", + "226598", + "226613", + "226648", + "22665", + "226668", + "226702", + "226704", + "226709", + "226767", + "226778", + "226785", + "226849", + "22685", + "22686", + "226883", + "226884", + "226892", + "226915", + "226931", + "226940", + "226958", + "22698", + "226984", + "226993", + "227008", + "22704", + "227086", + "227160", + "227162", + "227163", + "227169", + "227173", + "227182", + "227193", + "22720", + "22721", + "227211", + "227223", + "22723", + "227231", + "227245", + "227275", + "227292", + "227297", + "227314", + "227344", + "227347", + "22740", + "227410", + "227472", + "22748", + "227481", + "22750", + "22753", + "227544", + "227549", + "22756", + "22758", + "227599", + "227616", + "22762", + "227621", + "227627", + "227667", + "227670", + "227681", + "22769", + "227691", + "227697", + "22771", + "227726", + "227753", + "227779", + "22779", + "227799", + "227837", + "227848", + "227914", + "227927", + "22795", + "227967", + "227969", + "227980", + "227986", + "227991", + "228011", + "228025", + "22803", + "228035", + "228043", + "22809", + "22810", + "22814", + "22815", + "228158", + "22816", + "228166", + "228169", + "228181", + "22819", + "22821", + "228212", + "22823", + "228238", + "228253", + "22827", + "228280", + "228285", + "228305", + "228351", + "22836", + "228378", + "228392", + "22842", + "228458", + "228482", + "228496", + "22854", + "228592", + "228614", + "228616", + "22868", + "228691", + "22871", + "22873", + "228771", + "228800", + "22884", + "22885", + "22891", + "228938", + "228939", + "22895", + "22896", + "228961", + "228988", + "228999", + "229024", + "229032", + "22908", + "229083", + "22918", + "229189", + "22919", + "229197", + "22920", + "229209", + "22923", + "229232", + "229235", + "229321", + "229328", + "229364", + "229378", + "229398", + "22940", + "22944", + "229440", + "229456", + "22947", + "229524", + "22953", + "22954", + "22955", + "22956", + "22957", + "22958", + "229603", + "22961", + "229613", + "229656", + "22967", + "229705", + "22971", + "229809", + "229814", + "229859", + "22986", + "229902", + "22991", + "229918", + "22993", + "229943", + "22998", + "229984", + "229994", + "23000", + "230003", + "230009", + "23001", + "230024", + "230034", + "23009", + "23010", + "230109", + "230114", + "230115", + "230118", + "23014", + "230145", + "230147", + "23016", + "230243", + "230257", + "230258", + "230276", + "230281", + "23029", + "23030", + "230305", + "230360", + "23039", + "230394", + "230403", + "230406", + "230486", + "23049", + "23051", + "230519", + "23054", + "230569", + "23058", + "23059", + "230604", + "230620", + "230644", + "23066", + "23071", + "230711", + "230729", + "230754", + "230765", + "230776", + "23080", + "230803", + "23082", + "230822", + "230825", + "23086", + "230913", + "230915", + "230917", + "23092", + "230927", + "230965", + "23098", + "23100", + "231015", + "231038", + "231065", + "23107", + "23108", + "231098", + "231100", + "231171", + "23120", + "231224", + "231236", + "23126", + "231277", + "23130", + "231312", + "231340", + "231382", + "231389", + "23145", + "23153", + "231589", + "23162", + "231633", + "23166", + "23167", + "231710", + "231722", + "23173", + "231732", + "23175", + "23179", + "231838", + "231857", + "231883", + "231902", + "231904", + "23192", + "231935", + "23200", + "23202", + "23204", + "232073", + "232080", + "232095", + "23215", + "232181", + "232190", + "23221", + "232213", + "232235", + "232263", + "232338", + "23234", + "23239", + "232407", + "232434", + "232445", + "23246", + "232480", + "232488", + "232523", + "23256", + "23259", + "232594", + "23260", + "23263", + "232630", + "23264", + "23266", + "232693", + "232698", + "232700", + "232702", + "23272", + "232738", + "232764", + "23278", + "232787", + "23281", + "23284", + "23285", + "23287", + "232875", + "232878", + "23288", + "232885", + "23294", + "232948", + "232970", + "232972", + "232976", + "232998", + "233008", + "233009", + "233015", + "233034", + "233037", + "23308", + "23309", + "23310", + "233119", + "23312", + "233141", + "233208", + "23321", + "23322", + "23324", + "233246", + "233267", + "233282", + "233299", + "23332", + "233326", + "233330", + "23340", + "23353", + "23357", + "23359", + "23372", + "23374", + "23375", + "23383", + "23388", + "23395", + "23402", + "23404", + "23406", + "23409", + "23413", + "23420", + "23434", + "23441", + "23443", + "23453", + "23454", + "23462", + "23463", + "23464", + "23467", + "23475", + "23480", + "23485", + "23489", + "23490", + "23502", + "23504", + "23509", + "23510", + "23514", + "23516", + "23541", + "23542", + "23548", + "23549", + "23551", + "23555", + "23559", + "23578", + "23579", + "23583", + "23585", + "23589", + "23591", + "23612", + "23616", + "23621", + "23627", + "23637", + "23652", + "23654", + "23656", + "23657", + "23668", + "23681", + "23686", + "23692", + "23696", + "23697", + "23701", + "23702", + "23709", + "23739", + "23744", + "23753", + "23756", + "23764", + "23766", + "23774", + "23776", + "23784", + "23785", + "23794", + "23796", + "23799", + "23803", + "23823", + "23824", + "23825", + "23827", + "23835", + "23846", + "23855", + "23859", + "23868", + "23871", + "23876", + "23890", + "23891", + "23893", + "23895", + "23896", + "23897", + "23901", + "23906", + "23921", + "23928", + "23933", + "23945", + "23950", + "23953", + "23955", + "23960", + "23967", + "23973", + "23980", + "23981", + "23984", + "23988", + "23993", + "23995", + "23999", + "24005", + "24019", + "24022", + "24024", + "24029", + "24032", + "24033", + "24036", + "24037", + "24039", + "24043", + "24047", + "24056", + "24059", + "24060", + "24061", + "24072", + "24079", + "24085", + "24090", + "24101", + "24106", + "24112", + "24113", + "24118", + "24119", + "24123", + "24130", + "24131", + "24134", + "24136", + "24138", + "24142", + "24164", + "24168", + "24171", + "24176", + "24181", + "24184", + "24192", + "24197", + "24198", + "24200", + "24219", + "24223", + "24227", + "24230", + "24241", + "24246", + "24250", + "24251", + "24255", + "24263", + "24264", + "24269", + "24273", + "24275", + "24278", + "24284", + "24297", + "24303", + "24305", + "24309", + "24315", + "24323", + "24326", + "24333", + "24337", + "24338", + "24339", + "24341", + "24344", + "24353", + "24361", + "24373", + "24383", + "24390", + "24393", + "24396", + "24400", + "24404", + "24405", + "24410", + "24412", + "24433", + "24436", + "24438", + "24441", + "24446", + "24452", + "24453", + "24464", + "24466", + "24469", + "24487", + "24493", + "24500", + "24508", + "24513", + "24516", + "24517", + "24524", + "24527", + "24531", + "24541", + "24549", + "24557", + "24567", + "24578", + "24579", + "24580", + "24585", + "24588", + "24590", + "24599", + "24600", + "24616", + "24627", + "24630", + "24632", + "24633", + "24637", + "24639", + "24645", + "24649", + "24651", + "24655", + "24657", + "24668", + "24670", + "24676", + "24684", + "24688", + "24689", + "24692", + "24702", + "24704", + "24711", + "24716", + "24717", + "24733", + "24736", + "24739", + "24743", + "24769", + "24774", + "24777", + "24779", + "24782", + "24789", + "24798", + "24799", + "24801", + "24808", + "24822", + "24824", + "24832", + "24836", + "24849", + "24855", + "24863", + "24872", + "24879", + "24881", + "24884", + "24885", + "24886", + "24887", + "24888", + "24894", + "24895", + "24898", + "24902", + "24908", + "24917", + "24925", + "24928", + "24932", + "24940", + "24945", + "24956", + "24959", + "24962", + "24963", + "24968", + "24969", + "24983", + "24985", + "24986", + "24991", + "24995", + "24999", + "25001", + "25007", + "25009", + "25011", + "25012", + "25015", + "25018", + "25020", + "25021", + "25025", + "25031", + "25045", + "25049", + "25054", + "25058", + "25071", + "25081", + "25082", + "25087", + "25091", + "25105", + "25108", + "25112", + "25113", + "25117", + "25119", + "25124", + "25125", + "25129", + "25143", + "25145", + "25160", + "25168", + "25176", + "25186", + "25187", + "25193", + "25194", + "25196", + "25199", + "25207", + "25211", + "25215", + "25217", + "25218", + "25227", + "25245", + "25254", + "25270", + "25284", + "25288", + "25296", + "25299", + "25305", + "25333", + "25337", + "25338", + "25347", + "25349", + "25350", + "25353", + "25355", + "25358", + "25370", + "25393", + "25403", + "25412", + "25413", + "25414", + "25417", + "25422", + "25423", + "25425", + "25428", + "25434", + "25437", + "25449", + "25450", + "25451", + "25452", + "25471", + "25473", + "25474", + "25480", + "25485", + "25486", + "25495", + "25508", + "25509", + "25512", + "25514", + "25518", + "25520", + "25523", + "25524", + "25527", + "25530", + "25531", + "25539", + "25542", + "25544", + "25545", + "25554", + "25561", + "25565", + "25566", + "25577", + "25579", + "25582", + "25587", + "25597", + "25598", + "25601", + "25611", + "25619", + "25622", + "25632", + "25635", + "25637", + "25639", + "25643", + "25647", + "25654", + "25661", + "25665", + "25672", + "25674", + "25677", + "25679", + "25682", + "25686", + "25688", + "25693", + "25696", + "25699", + "25700", + "25704", + "25706", + "25711", + "25712", + "25718", + "25722", + "25726", + "25728", + "25734", + "25740", + "25743", + "25745", + "25747", + "25750", + "25780", + "25785", + "25787", + "25798", + "25799", + "25816", + "25819", + "25823", + "25825", + "25830", + "25834", + "25841", + "25848", + "25853", + "25854", + "25861", + "25863", + "25866", + "25868", + "25869", + "25874", + "25879", + "25899", + "25904", + "25905", + "25913", + "25941", + "25944", + "25945", + "25948", + "25950", + "25953", + "25959", + "25971", + "25973", + "25974", + "25980", + "25983", + "25990", + "25992", + "25994", + "25998", + "25999", + "26004", + "26015", + "26016", + "26017", + "26020", + "26021", + "26024", + "26032", + "26033", + "26039", + "26043", + "26047", + "26053", + "26062", + "26070", + "26074", + "26084", + "26089", + "26093", + "26094", + "26107", + "26108", + "26120", + "26136", + "26144", + "26155", + "26157", + "26159", + "26162", + "26168", + "26170", + "26173", + "26180", + "26184", + "26190", + "26191", + "26197", + "26203", + "26216", + "26220", + "26233", + "26235", + "26243", + "26244", + "26245", + "26253", + "26256", + "26277", + "26281", + "26284", + "26286", + "26289", + "26291", + "26299", + "26316", + "26325", + "26327", + "26347", + "26348", + "26351", + "26352", + "26354", + "26358", + "26359", + "26360", + "26365", + "26371", + "26375", + "26388", + "26399", + "26410", + "26412", + "26414", + "26426", + "26437", + "26438", + "26439", + "26452", + "26477", + "26481", + "26485", + "26486", + "26489", + "26517", + "26526", + "26530", + "26539", + "26541", + "26546", + "26558", + "26560", + "26571", + "26576", + "26577", + "26578", + "26579", + "26581", + "26603", + "26615", + "26620", + "26625", + "26631", + "26643", + "26644", + "26645", + "26658", + "26661", + "26666", + "26670", + "26671", + "26683", + "26685", + "26686", + "26692", + "26696", + "26699", + "26700", + "26707", + "26711", + "26718", + "26735", + "26736", + "26745", + "26748", + "26753", + "26760", + "26762", + "26764", + "26766", + "26768", + "26773", + "26780", + "26785", + "26790", + "26800", + "26808", + "26811", + "26817", + "26818", + "26819", + "26821", + "26833", + "26858", + "26861", + "26872", + "26874", + "26875", + "26878", + "26884", + "26892", + "26895", + "26897", + "26912", + "26918", + "26926", + "26929", + "26937", + "26944", + "26954", + "26958", + "26964", + "26966", + "26968", + "26969", + "26976", + "26980", + "26981", + "26991", + "26992", + "27024", + "27027", + "27028", + "27031", + "27033", + "27042", + "27043", + "27046", + "27050", + "27065", + "27067", + "27078", + "27084", + "27093", + "27121", + "27130", + "27138", + "27144", + "27145", + "27163", + "27172", + "27176", + "27192", + "27193", + "27197", + "27198", + "27200", + "27204", + "27206", + "27223", + "27224", + "27234", + "27236", + "27239", + "27247", + "27249", + "27254", + "27261", + "27268", + "27270", + "27276", + "27277", + "27282", + "27283", + "27284", + "27295", + "27296", + "27301", + "27305", + "27307", + "27313", + "27316", + "27321", + "27323", + "27326", + "27332", + "27346", + "27355", + "27358", + "27361", + "27365", + "27368", + "27369", + "27370", + "27374", + "27382", + "27387", + "27391", + "27395", + "27407", + "27409", + "27421", + "27430", + "27432", + "27436", + "27437", + "27443", + "27444", + "27450", + "27452", + "27458", + "27467", + "27468", + "27473", + "27474", + "27485", + "27487", + "27492", + "27496", + "27497", + "27499", + "27502", + "27508", + "27509", + "27512", + "27519", + "27525", + "27527", + "27529", + "27543", + "27549", + "27553", + "27559", + "27560", + "27570", + "27576", + "27577", + "27579", + "27581", + "27584", + "27592", + "27594", + "27601", + "27604", + "27607", + "27608", + "27611", + "27612", + "27619", + "27624", + "27626", + "27642", + "27648", + "27658", + "27660", + "27671", + "27682", + "27687", + "27688", + "27703", + "27705", + "27714", + "27716", + "27721", + "27722", + "27732", + "27734", + "27740", + "27743", + "27747", + "27749", + "27750", + "27757", + "27760", + "27766", + "27773", + "27780", + "27783", + "27789", + "27798", + "27800", + "27815", + "27817", + "27832", + "27833", + "27836", + "27850", + "27852", + "27858", + "27869", + "27876", + "27877", + "27879", + "27880", + "27881", + "27883", + "27888", + "27893", + "27920", + "27931", + "27935", + "27936", + "27938", + "27940", + "27941", + "27943", + "27947", + "27949", + "27956", + "27962", + "27970", + "27986", + "28006", + "28007", + "28008", + "28013", + "28026", + "28027", + "28028", + "28031", + "28038", + "28039", + "28045", + "28047", + "28050", + "28052", + "28061", + "28069", + "28070", + "28072", + "28073", + "28081", + "28082", + "28090", + "28100", + "28106", + "28109", + "28110", + "28112", + "28116", + "28119", + "28121", + "28122", + "28134", + "28141", + "28150", + "28153", + "28155", + "28158", + "28159", + "28160", + "28162", + "28163", + "28169", + "28177", + "28181", + "28182", + "28183", + "28190", + "28191", + "28197", + "28205", + "28207", + "28208", + "28209", + "28212", + "28218", + "28223", + "28226", + "28228", + "28229", + "28232", + "28241", + "28242", + "28244", + "28249", + "28252", + "28261", + "28262", + "28263", + "28272", + "28273", + "28278", + "28285", + "28294", + "28296", + "28299", + "28311", + "28319", + "28320", + "28323", + "28332", + "28338", + "28346", + "28350", + "28360", + "28372", + "28376", + "28378", + "28382", + "28383", + "28390", + "28392", + "28395", + "28396", + "28411", + "28416", + "28423", + "28441", + "28452", + "28453", + "28463", + "28467", + "28471", + "28473", + "28476", + "28479", + "28483", + "28489", + "28498", + "28499", + "28501", + "28503", + "28504", + "28512", + "28515", + "28517", + "28519", + "28526", + "28538", + "28540", + "28541", + "28542", + "28546", + "28548", + "28553", + "28557", + "28558", + "28560", + "28583", + "28584", + "28591", + "28595", + "28598", + "28600", + "28601", + "28607", + "28609", + "28611", + "28612", + "28616", + "28621", + "28622", + "28631", + "28645", + "28647", + "28660", + "28661", + "28662", + "28665", + "28675", + "28682", + "28685", + "28691", + "28697", + "28699", + "28700", + "28708", + "28719", + "28724", + "28725", + "28727", + "28728", + "28740", + "28741", + "28744", + "28747", + "28749", + "28760", + "28763", + "28764", + "28777", + "28778", + "28782", + "28788", + "28793", + "28794", + "28797", + "28798", + "28803", + "28827", + "28831", + "28833", + "28842", + "28844", + "28846", + "28847", + "28863", + "28867", + "28885", + "28888", + "28895", + "28898", + "28902", + "28912", + "28914", + "28919", + "28923", + "28925", + "28927", + "28939", + "28940", + "28945", + "28949", + "28951", + "28954", + "28956", + "28958", + "28960", + "28972", + "28973", + "28981", + "28982", + "28992", + "29010", + "29022", + "29034", + "29036", + "29040", + "29059", + "29060", + "29072", + "29074", + "29075", + "29077", + "29086", + "29094", + "29095", + "29104", + "29106", + "29107", + "29111", + "29121", + "29124", + "29130", + "29132", + "29147", + "29184", + "29190", + "29215", + "29222", + "29223", + "29242", + "29249", + "29258", + "29260", + "29263", + "29266", + "29281", + "29285", + "29291", + "29304", + "29309", + "29310", + "29315", + "29318", + "29321", + "29326", + "29340", + "29345", + "29347", + "29360", + "29361", + "29366", + "29371", + "29377", + "29394", + "29399", + "29404", + "29406", + "29411", + "29443", + "29447", + "29453", + "29462", + "29468", + "29479", + "29495", + "29499", + "29505", + "29507", + "29509", + "29515", + "29519", + "29524", + "29530", + "29544", + "29546", + "29547", + "29555", + "29563", + "29566", + "29573", + "29575", + "29576", + "29578", + "29590", + "29591", + "29607", + "29634", + "29635", + "29644", + "29645", + "29650", + "29652", + "29658", + "29662", + "29663", + "29676", + "29679", + "29680", + "29684", + "29692", + "29696", + "29699", + "29704", + "29705", + "29707", + "29719", + "29723", + "29725", + "29726", + "29729", + "29735", + "29742", + "29750", + "29762", + "29769", + "29772", + "29774", + "29780", + "29781", + "29792", + "29801", + "29806", + "29811", + "29816", + "29817", + "29821", + "29832", + "29834", + "29836", + "29838", + "29841", + "29843", + "29846", + "29847", + "29853", + "29858", + "29861", + "29868", + "29870", + "29871", + "29883", + "29894", + "29896", + "29898", + "29905", + "29908", + "29911", + "29914", + "29918", + "29927", + "29931", + "29933", + "29941", + "29949", + "29955", + "29961", + "29964", + "29966", + "29967", + "29976", + "29980", + "29983", + "29984", + "29994", + "29997", + "30002", + "30010", + "30021", + "30027", + "30028", + "30029", + "30034", + "30038", + "30047", + "30048", + "30049", + "30050", + "30051", + "30061", + "30064", + "30071", + "30074", + "30075", + "30077", + "30082", + "30087", + "30093", + "30100", + "30101", + "30102", + "30109", + "30117", + "30124", + "30131", + "30134", + "30143", + "30145", + "30154", + "30155", + "30173", + "30177", + "30197", + "30201", + "30203", + "30210", + "30214", + "30216", + "30221", + "30223", + "30231", + "30239", + "30240", + "30242", + "30245", + "30247", + "30254", + "30260", + "30271", + "30272", + "30284", + "30289", + "30296", + "30307", + "30310", + "30312", + "30313", + "30319", + "30328", + "30331", + "30340", + "30345", + "30346", + "30348", + "30356", + "30360", + "30365", + "30375", + "30382", + "30402", + "30403", + "30405", + "30410", + "30414", + "30436", + "30440", + "30441", + "30444", + "30454", + "30457", + "30473", + "30474", + "30476", + "30485", + "30496", + "30501", + "30506", + "30507", + "30513", + "30521", + "30522", + "30524", + "30529", + "30531", + "30534", + "30541", + "30548", + "30551", + "30555", + "30556", + "30560", + "30563", + "30565", + "30567", + "30586", + "30588", + "30590", + "30599", + "30604", + "30614", + "30650", + "30653", + "30656", + "30663", + "30666", + "30667", + "30669", + "30678", + "30689", + "30700", + "30704", + "30711", + "30727", + "30728", + "30729", + "30731", + "30745", + "30746", + "30748", + "30750", + "30759", + "30760", + "30766", + "30771", + "30781", + "30782", + "30794", + "30797", + "30805", + "30813", + "30818", + "30821", + "30848", + "30849", + "30854", + "30868", + "30869", + "30873", + "30874", + "30879", + "30893", + "30896", + "30902", + "30908", + "30911", + "30913", + "30917", + "30918", + "30931", + "30943", + "30949", + "30954", + "30959", + "30964", + "30974", + "30977", + "30981", + "30985", + "30996", + "30997", + "31003", + "31020", + "31025", + "31032", + "31061", + "31064", + "31065", + "31076", + "31082", + "31091", + "31104", + "31105", + "31115", + "31121", + "31123", + "31132", + "31134", + "31138", + "31145", + "31149", + "31154", + "31156", + "31166", + "31167", + "31168", + "31169", + "31170", + "31177", + "31182", + "31183", + "31188", + "31196", + "31198", + "31199", + "31210", + "31227", + "31230", + "31234", + "31244", + "31245", + "31251", + "31252", + "31258", + "31267", + "31275", + "31280", + "31281", + "31282", + "31292", + "31306", + "31307", + "31308", + "31311", + "31312", + "31313", + "31320", + "31330", + "31350", + "31358", + "31359", + "31363", + "31365", + "31381", + "31393", + "31395", + "31396", + "31405", + "31408", + "31414", + "31416", + "31425", + "31426", + "31429", + "31434", + "31437", + "31440", + "31443", + "31448", + "31460", + "31463", + "31469", + "31478", + "31482", + "31485", + "31490", + "31503", + "31509", + "31521", + "31527", + "31538", + "31541", + "31543", + "31546", + "31552", + "31554", + "31563", + "31564", + "31573", + "31579", + "31589", + "31601", + "31602", + "31614", + "31619", + "31623", + "31636", + "31648", + "31654", + "31659", + "31678", + "31688", + "31689", + "31693", + "31711", + "31717", + "31721", + "31725", + "31727", + "31729", + "31731", + "31733", + "31737", + "31740", + "31742", + "31745", + "31748", + "31764", + "31769", + "31772", + "31777", + "31779", + "31785", + "31796", + "31801", + "31810", + "31813", + "31818", + "31819", + "31821", + "31823", + "31824", + "31825", + "31826", + "31828", + "31830", + "31837", + "31845", + "31847", + "31850", + "31851", + "31855", + "31856", + "31857", + "31866", + "31883", + "31889", + "31892", + "31903", + "31907", + "31909", + "31915", + "31919", + "31922", + "31924", + "31927", + "31928", + "31944", + "31945", + "31958", + "31960", + "31963", + "31964", + "31966", + "31971", + "31973", + "31980", + "31986", + "31991", + "31992", + "31994", + "31997", + "32011", + "32016", + "32020", + "32027", + "32029", + "32031", + "32034", + "32039", + "32057", + "32065", + "32073", + "32074", + "32080", + "32082", + "32083", + "32089", + "32091", + "32097", + "32099", + "32100", + "32101", + "32107", + "32109", + "32115", + "32128", + "32141", + "32148", + "32156", + "32177", + "32178", + "32184", + "32187", + "32194", + "32195", + "32196", + "32197", + "32201", + "32212", + "32213", + "32225", + "32231", + "32237", + "32241", + "32247", + "32249", + "32250", + "32265", + "32268", + "32270", + "32276", + "32277", + "32280", + "32281", + "32285", + "32287", + "32288", + "32293", + "32296", + "32305", + "32307", + "32314", + "32326", + "32331", + "32332", + "32342", + "32347", + "32350", + "32362", + "32368", + "32370", + "32376", + "32377", + "32382", + "32385", + "32387", + "32395", + "32412", + "32415", + "32421", + "32430", + "32431", + "32434", + "32435", + "32437", + "32439", + "32452", + "32460", + "32465", + "32467", + "32471", + "32473", + "32474", + "32485", + "32492", + "32495", + "32499", + "32509", + "32515", + "32519", + "32525", + "32527", + "32538", + "32545", + "32551", + "32564", + "32567", + "32568", + "32578", + "32590", + "32601", + "32603", + "32604", + "32607", + "32609", + "32610", + "32613", + "32615", + "32630", + "32631", + "32634", + "32645", + "32646", + "32659", + "32661", + "32665", + "32673", + "32675", + "32678", + "32682", + "32701", + "32702", + "32704", + "32705", + "32709", + "32717", + "32732", + "32742", + "32756", + "32759", + "32763", + "32771", + "32773", + "32774", + "32777", + "32779", + "32781", + "32783", + "32787", + "32791", + "32796", + "32805", + "32808", + "32815", + "32821", + "32826", + "32833", + "32836", + "32847", + "32852", + "32854", + "32858", + "32867", + "32872", + "32884", + "32886", + "32903", + "32907", + "32914", + "32921", + "32922", + "32934", + "32936", + "32941", + "32945", + "32948", + "32963", + "32964", + "32968", + "32976", + "32980", + "32983", + "32984", + "33007", + "33010", + "33025", + "33027", + "33032", + "33035", + "33037", + "33049", + "33050", + "33053", + "33054", + "33057", + "33066", + "33067", + "33073", + "33077", + "33079", + "33085", + "33086", + "33087", + "33091", + "33095", + "33097", + "33104", + "33112", + "33114", + "33121", + "33122", + "33123", + "33133", + "33138", + "33139", + "33140", + "33141", + "33143", + "33158", + "33161", + "33174", + "33175", + "33176", + "33184", + "33189", + "33191", + "33198", + "33201", + "33207", + "33213", + "33217", + "33218", + "33219", + "33227", + "33231", + "33234", + "33237", + "33238", + "33239", + "33252", + "33256", + "33257", + "33273", + "33279", + "33283", + "33286", + "33287", + "33288", + "33292", + "33295", + "33300", + "33302", + "33303", + "33305", + "33311", + "33318", + "33320", + "33323", + "33325", + "33330", + "33335", + "33337", + "33350", + "33358", + "33363", + "33375", + "33377", + "33383", + "33385", + "33391", + "33394", + "33397", + "33419", + "33437", + "33445", + "33458", + "33460", + "33464", + "33465", + "33470", + "33473", + "33491", + "33494", + "33496", + "33497", + "33499", + "33508", + "33509", + "33517", + "33520", + "33526", + "33530", + "33531", + "33532", + "33536", + "33544", + "33551", + "33552", + "33563", + "33564", + "33566", + "33567", + "33575", + "33584", + "33589", + "33590", + "33598", + "33609", + "33615", + "33616", + "33633", + "33635", + "33638", + "33639", + "33641", + "33645", + "33647", + "33656", + "33661", + "33669", + "33677", + "33685", + "33692", + "33703", + "33706", + "33721", + "33722", + "33726", + "33729", + "33735", + "33742", + "33748", + "33749", + "33760", + "33770", + "33801", + "33802", + "33811", + "33814", + "33816", + "33819", + "33822", + "33829", + "33832", + "33840", + "33851", + "33868", + "33871", + "33874", + "33882", + "33886", + "33888", + "33892", + "33903", + "33909", + "33912", + "33916", + "33918", + "33919", + "33922", + "33926", + "33927", + "33935", + "33940", + "33944", + "33946", + "33951", + "33962", + "33965", + "33968", + "33971", + "33981", + "33989", + "33993", + "34011", + "34021", + "34034", + "34048", + "34053", + "34057", + "34067", + "34068", + "34070", + "34079", + "34082", + "34088", + "34110", + "34111", + "34113", + "34120", + "34124", + "34140", + "34155", + "34159", + "34164", + "34178", + "34180", + "34193", + "34200", + "34202", + "34214", + "34215", + "34223", + "34232", + "34234", + "34241", + "34244", + "34248", + "34252", + "34254", + "34266", + "34270", + "34271", + "34278", + "34279", + "34280", + "34284", + "34305", + "34306", + "34310", + "34311", + "34326", + "34361", + "34362", + "34363", + "34367", + "34368", + "34369", + "34383", + "34385", + "34394", + "34397", + "34401", + "34402", + "34403", + "34404", + "34428", + "34440", + "34445", + "34450", + "34456", + "34459", + "34460", + "34461", + "34467", + "34481", + "34482", + "34485", + "34486", + "34496", + "34497", + "34500", + "34501", + "34504", + "34506", + "34507", + "34514", + "34520", + "34533", + "34541", + "34548", + "34551", + "34552", + "34559", + "34560", + "34569", + "34573", + "34589", + "34595", + "34599", + "34606", + "34611", + "34614", + "34620", + "34628", + "34630", + "34631", + "34633", + "34641", + "34650", + "34656", + "34659", + "34679", + "34684", + "34687", + "34688", + "34698", + "34706", + "34708", + "34721", + "34723", + "34728", + "34730", + "34731", + "34739", + "34749", + "34754", + "34758", + "34761", + "34764", + "34774", + "34775", + "34783", + "34794", + "34796", + "34806", + "34809", + "34820", + "34821", + "34825", + "34842", + "34850", + "34860", + "34873", + "34876", + "34879", + "34880", + "34881", + "34892", + "34893", + "34894", + "34895", + "34912", + "34913", + "34916", + "34918", + "34925", + "34931", + "34932", + "34933", + "34937", + "34940", + "34947", + "34948", + "34951", + "34957", + "34958", + "34960", + "34967", + "34969", + "34970", + "34989", + "34995", + "34997", + "35002", + "35005", + "35022", + "35023", + "35044", + "35045", + "35046", + "35051", + "35061", + "35086", + "35089", + "35092", + "35095", + "35106", + "35113", + "35128", + "35132", + "35142", + "35146", + "35147", + "35159", + "35161", + "35167", + "35174", + "35184", + "35192", + "35196", + "35224", + "35227", + "35237", + "35241", + "35242", + "35256", + "35264", + "35270", + "35274", + "35279", + "35282", + "35296", + "35297", + "35302", + "35306", + "35308", + "35312", + "35313", + "35317", + "35318", + "35326", + "35334", + "35341", + "35352", + "35353", + "35355", + "35356", + "35360", + "35362", + "35375", + "35379", + "35382", + "35385", + "35400", + "35408", + "35415", + "35428", + "35431", + "35432", + "35451", + "35454", + "35455", + "35458", + "35466", + "35467", + "35479", + "35481", + "35484", + "35487", + "35490", + "35492", + "35499", + "35501", + "35510", + "35514", + "35522", + "35526", + "35529", + "35530", + "35536", + "35540", + "35542", + "35549", + "35555", + "35559", + "35561", + "35563", + "35564", + "35565", + "35566", + "35575", + "35577", + "35580", + "35585", + "35587", + "35589", + "35591", + "35595", + "35610", + "35617", + "35622", + "35636", + "35640", + "35650", + "35653", + "35658", + "35660", + "35661", + "35669", + "35673", + "35674", + "35676", + "35682", + "35683", + "35686", + "35687", + "35689", + "35691", + "35692", + "35693", + "35697", + "35701", + "35705", + "35711", + "35713", + "35728", + "35735", + "35738", + "35739", + "35746", + "35750", + "35754", + "35757", + "35780", + "35784", + "35813", + "35822", + "35827", + "35828", + "35829", + "35831", + "35833", + "35841", + "35853", + "35854", + "35861", + "35862", + "35864", + "35866", + "35869", + "35871", + "35883", + "35888", + "35890", + "35892", + "35894", + "35895", + "35897", + "35898", + "35899", + "35903", + "35908", + "35910", + "35915", + "35922", + "35939", + "35950", + "35965", + "35968", + "35990", + "35992", + "35993", + "36018", + "36021", + "36035", + "36036", + "36043", + "36046", + "36050", + "36051", + "36056", + "36088", + "36090", + "36096", + "36101", + "36104", + "36119", + "36125", + "36127", + "36136", + "36145", + "36148", + "36150", + "36155", + "36169", + "36184", + "36195", + "36198", + "36203", + "36204", + "36214", + "36219", + "36224", + "36226", + "36258", + "36260", + "36265", + "36267", + "36270", + "36274", + "36279", + "36282", + "36286", + "36289", + "36303", + "36304", + "36312", + "36321", + "36323", + "36326", + "36329", + "36335", + "36352", + "36353", + "36362", + "36367", + "36382", + "36400", + "36405", + "36410", + "36415", + "36424", + "36425", + "36427", + "36446", + "36449", + "36453", + "36456", + "36457", + "36458", + "36468", + "36472", + "36473", + "36476", + "36486", + "36490", + "36498", + "36500", + "36505", + "36507", + "36511", + "36522", + "36529", + "36532", + "36533", + "36562", + "36564", + "36566", + "36573", + "36574", + "36575", + "36586", + "36588", + "36598", + "36605", + "36607", + "36610", + "36612", + "36613", + "36614", + "36616", + "36619", + "36625", + "36629", + "36660", + "36661", + "36669", + "36670", + "36676", + "36679", + "36695", + "36698", + "36699", + "36702", + "36710", + "36712", + "36718", + "36719", + "36728", + "36729", + "36747", + "36750", + "36753", + "36754", + "36755", + "36770", + "36773", + "36776", + "36780", + "36785", + "36788", + "36791", + "36797", + "36803", + "36812", + "36818", + "36833", + "36849", + "36862", + "36865", + "36866", + "36870", + "36888", + "36899", + "36900", + "36901", + "36905", + "36907", + "36912", + "36924", + "36931", + "36942", + "36948", + "36956", + "36958", + "36971", + "36984", + "36986", + "36994", + "36995", + "36997", + "36998", + "37005", + "37007", + "37010", + "37015", + "37017", + "37018", + "37028", + "37035", + "37046", + "37054", + "37055", + "37056", + "37067", + "37071", + "37077", + "37087", + "37090", + "37092", + "37096", + "37102", + "37107", + "37113", + "37120", + "37140", + "37144", + "37145", + "37172", + "37182", + "37187", + "37188", + "37194", + "37199", + "37200", + "37207", + "37225", + "37241", + "37242", + "37249", + "37258", + "37259", + "37265", + "37267", + "37272", + "37277", + "37279", + "37280", + "37293", + "37304", + "37310", + "37313", + "37315", + "37319", + "37322", + "37323", + "37327", + "37333", + "37335", + "37339", + "37341", + "37344", + "37349", + "37351", + "37355", + "37361", + "37363", + "37385", + "37406", + "37411", + "37414", + "37417", + "37423", + "37427", + "37428", + "37435", + "37436", + "37439", + "37440", + "37441", + "37442", + "37453", + "37457", + "37471", + "37475", + "37476", + "37477", + "37497", + "37507", + "37517", + "37519", + "37524", + "37527", + "37530", + "37533", + "37534", + "37539", + "37540", + "37541", + "37545", + "37546", + "37550", + "37568", + "37570", + "37571", + "37575", + "37581", + "37585", + "37588", + "37610", + "37614", + "37615", + "37619", + "37626", + "37635", + "37636", + "37637", + "37638", + "37664", + "37666", + "37683", + "37686", + "37688", + "37698", + "37705", + "37711", + "37713", + "37716", + "37718", + "37721", + "37722", + "37737", + "37748", + "37750", + "37753", + "37759", + "37761", + "37762", + "37766", + "37767", + "37775", + "37782", + "37784", + "37786", + "37792", + "37795", + "37800", + "37804", + "37817", + "37820", + "37828", + "37837", + "37847", + "37853", + "37858", + "37859", + "37865", + "37876", + "37879", + "37883", + "37884", + "37887", + "37888", + "37894", + "37896", + "37900", + "37912", + "37917", + "37925", + "37926", + "37933", + "37935", + "37946", + "37959", + "37967", + "37980", + "37981", + "37983", + "37987", + "37997", + "38007", + "38009", + "38015", + "38027", + "38038", + "38042", + "38076", + "38084", + "38088", + "38093", + "38105", + "38107", + "38119", + "38124", + "38128", + "38129", + "38138", + "38140", + "38154", + "38165", + "38171", + "38172", + "38173", + "38176", + "38180", + "38189", + "38200", + "38207", + "38210", + "38213", + "38221", + "38222", + "38226", + "38239", + "38251", + "38270", + "38276", + "38282", + "38291", + "38297", + "38305", + "38308", + "38314", + "38318", + "38346", + "38372", + "38373", + "38380", + "38381", + "38382", + "38393", + "38394", + "38404", + "38406", + "38409", + "38410", + "38411", + "38413", + "38424", + "38425", + "38426", + "38428", + "38429", + "38431", + "38432", + "38454", + "38455", + "38456", + "38463", + "38466", + "38470", + "38471", + "38475", + "38476", + "38480", + "38482", + "38488", + "38491", + "38494", + "38495", + "38501", + "38506", + "38536", + "38541", + "38542", + "38548", + "38549", + "38553", + "38557", + "38562", + "38565", + "38573", + "38579", + "38585", + "38587", + "38600", + "38607", + "38625", + "38637", + "38646", + "38648", + "38657", + "38659", + "38664", + "38665", + "38675", + "38676", + "38680", + "38684", + "38693", + "38698", + "38699", + "38704", + "38706", + "38707", + "38710", + "38711", + "38716", + "38722", + "38727", + "38734", + "38741", + "38743", + "38745", + "38749", + "38757", + "38760", + "38781", + "38784", + "38786", + "38788", + "38789", + "38810", + "38824", + "38835", + "38838", + "38851", + "38852", + "38857", + "38867", + "38871", + "38875", + "38877", + "38884", + "38885", + "38888", + "38890", + "38893", + "38900", + "38911", + "38914", + "38922", + "38931", + "38937", + "38941", + "38942", + "38943", + "38945", + "38956", + "38961", + "38970", + "38974", + "38979", + "38987", + "38988", + "38994", + "39007", + "39021", + "39022", + "39029", + "39033", + "39036", + "39045", + "39048", + "39049", + "39052", + "39054", + "39056", + "39062", + "39065", + "39069", + "39072", + "39075", + "39077", + "39078", + "39081", + "39082", + "39090", + "39091", + "39092", + "39093", + "39094", + "39095", + "39097", + "39099", + "39100", + "39102", + "39107", + "39123", + "39129", + "39130", + "39131", + "39151", + "39153", + "39154", + "39158", + "39159", + "39165", + "39166", + "39175", + "39178", + "39180", + "39184", + "39202", + "39203", + "39205", + "39206", + "39208", + "39215", + "39223", + "39230", + "39236", + "39238", + "39239", + "39248", + "39275", + "39287", + "39291", + "39296", + "39301", + "39303", + "39305", + "39307", + "39320", + "39321", + "39323", + "39340", + "39341", + "39351", + "39368", + "39369", + "39373", + "39379", + "39385", + "39387", + "39404", + "39406", + "39410", + "39411", + "39419", + "39424", + "39425", + "39426", + "39427", + "39428", + "39431", + "39436", + "39439", + "39443", + "39455", + "39457", + "39468", + "39472", + "39474", + "39480", + "39497", + "39500", + "39511", + "39513", + "39516", + "39529", + "39535", + "39538", + "39554", + "39555", + "39556", + "39561", + "39566", + "39570", + "39573", + "39575", + "39608", + "39613", + "39614", + "39618", + "39619", + "39622", + "39626", + "39631", + "39638", + "39640", + "39641", + "39649", + "39653", + "39654", + "39658", + "39674", + "39676", + "39678", + "39697", + "39718", + "39723", + "39724", + "39729", + "39731", + "39736", + "39737", + "39740", + "39745", + "39747", + "39752", + "39756", + "39760", + "39761", + "39764", + "39765", + "39787", + "39789", + "39790", + "39791", + "39793", + "39794", + "39798", + "39801", + "39802", + "39805", + "39806", + "39815", + "39817", + "39822", + "39826", + "39830", + "39832", + "39850", + "39855", + "39870", + "39871", + "39878", + "39886", + "39887", + "39889", + "39890", + "39893", + "39912", + "39913", + "39921", + "39928", + "39944", + "39947", + "39955", + "39961", + "39964", + "39966", + "39969", + "39970", + "39973", + "39979", + "40014", + "40015", + "40022", + "40038", + "40041", + "40042", + "40053", + "40055", + "40056", + "40058", + "40060", + "40063", + "40068", + "40070", + "40091", + "40093", + "40096", + "40101", + "40117", + "40122", + "40127", + "40128", + "40131", + "40134", + "40138", + "40140", + "40143", + "40144", + "40164", + "40167", + "40169", + "40170", + "40177", + "40178", + "40180", + "40190", + "40193", + "40197", + "40200", + "40201", + "40202", + "40208", + "40213", + "40218", + "40224", + "40243", + "40247", + "40250", + "40252", + "40253", + "40263", + "40266", + "40268", + "40276", + "40277", + "40282", + "40294", + "40296", + "40299", + "40308", + "40321", + "40333", + "40348", + "40350", + "40353", + "40355", + "40358", + "40362", + "40367", + "40375", + "40377", + "40393", + "40394", + "40401", + "40408", + "40415", + "40416", + "40421", + "40424", + "40436", + "40442", + "40450", + "40457", + "40468", + "40470", + "40474", + "40478", + "40483", + "40498", + "40506", + "40525", + "40534", + "40535", + "40536", + "40539", + "40543", + "40548", + "40556", + "40561", + "40574", + "40575", + "40584", + "40587", + "40590", + "40592", + "40604", + "40607", + "40609", + "40619", + "40626", + "40651", + "40656", + "40660", + "40669", + "40674", + "40677", + "40686", + "40689", + "40691", + "40699", + "40702", + "40712", + "40715", + "40716", + "40723", + "40731", + "40757", + "40761", + "40773", + "40777", + "40782", + "40788", + "40795", + "40804", + "40818", + "40819", + "40821", + "40827", + "40828", + "40829", + "40837", + "40840", + "40841", + "40842", + "40845", + "40849", + "40850", + "40853", + "40864", + "40870", + "40874", + "40875", + "40881", + "40887", + "40889", + "40894", + "40897", + "40901", + "40906", + "40907", + "40918", + "40922", + "40924", + "40926", + "40931", + "40946", + "40952", + "40965", + "40968", + "40974", + "40975", + "40989", + "40995", + "40997", + "41003", + "41004", + "41005", + "41009", + "41012", + "41019", + "41020", + "41034", + "41037", + "41039", + "41044", + "41054", + "41064", + "41069", + "41072", + "41079", + "41083", + "41094", + "41096", + "41108", + "41122", + "41129", + "41132", + "41134", + "41156", + "41158", + "41160", + "41181", + "41193", + "41198", + "41202", + "41204", + "41210", + "41212", + "41214", + "41223", + "41226", + "41233", + "41261", + "41265", + "41270", + "41279", + "41285", + "41292", + "41293", + "41294", + "41299", + "41304", + "41313", + "41314", + "41322", + "41338", + "41345", + "41347", + "41349", + "41350", + "41352", + "41354", + "41355", + "41358", + "41359", + "41365", + "41377", + "41392", + "41398", + "41402", + "41405", + "41411", + "41412", + "41420", + "41422", + "41429", + "41434", + "41449", + "41452", + "41453", + "41456", + "41459", + "41460", + "41467", + "41470", + "41474", + "41480", + "41481", + "41483", + "41485", + "41490", + "41499", + "41500", + "41501", + "41506", + "41514", + "41516", + "41523", + "41528", + "41543", + "41547", + "41549", + "41555", + "41556", + "41558", + "41565", + "41572", + "41573", + "41576", + "41579", + "41581", + "41588", + "41605", + "41625", + "41627", + "41633", + "41637", + "41638", + "41643", + "41645", + "41650", + "41653", + "41665", + "41666", + "41667", + "41668", + "41670", + "41678", + "41685", + "41691", + "41693", + "41695", + "41696", + "41699", + "41717", + "41728", + "41729", + "41736", + "41748", + "41771", + "41775", + "41795", + "41797", + "41806", + "41811", + "41814", + "41826", + "41834", + "41838", + "41843", + "41848", + "41849", + "41852", + "41858", + "41860", + "41872", + "41874", + "41876", + "41882", + "41888", + "41895", + "41899", + "41900", + "41908", + "41912", + "41917", + "41920", + "41922", + "41931", + "41942", + "41949", + "41950", + "41955", + "41960", + "41965", + "41972", + "41976", + "41982", + "41989", + "42000", + "42009", + "42012", + "42014", + "42016", + "42022", + "42026", + "42028", + "42047", + "42052", + "42069", + "42070", + "42071", + "42077", + "42078", + "42081", + "42087", + "42089", + "42091", + "42118", + "42122", + "42126", + "42130", + "42138", + "42144", + "42147", + "42153", + "42164", + "42166", + "42168", + "42169", + "42179", + "42181", + "42187", + "42193", + "42200", + "42205", + "42211", + "42212", + "42215", + "42217", + "42231", + "42236", + "42244", + "42256", + "42265", + "42275", + "42281", + "42288", + "42294", + "42297", + "42304", + "42309", + "42310", + "42311", + "42312", + "42313", + "42318", + "42325", + "42332", + "42335", + "42338", + "42342", + "42345", + "42346", + "42355", + "42363", + "42366", + "42368", + "42369", + "42371", + "42372", + "42385", + "42387", + "42418", + "42419", + "42423", + "42425", + "42428", + "42434", + "42440", + "42444", + "42448", + "42454", + "42458", + "42465", + "42472", + "42475", + "42477", + "42486", + "42488", + "42495", + "42499", + "42512", + "42513", + "42514", + "42515", + "42523", + "42526", + "42527", + "42531", + "42534", + "42540", + "42542", + "42549", + "42550", + "42555", + "42561", + "42569", + "42580", + "42582", + "42588", + "42592", + "42598", + "42600", + "42615", + "42617", + "42626", + "42636", + "42648", + "42666", + "42681", + "42686", + "42706", + "42710", + "42719", + "42720", + "42723", + "42736", + "42747", + "42750", + "42757", + "42758", + "42759", + "42774", + "42777", + "42779", + "42782", + "42792", + "42793", + "42816", + "42823", + "42833", + "42873", + "42884", + "42888", + "42893", + "42898", + "42905", + "42906", + "42909", + "42910", + "42912", + "42920", + "42921", + "42922", + "42926", + "42928", + "42933", + "42938", + "42947", + "42948", + "42952", + "42955", + "42987", + "43000", + "43010", + "43016", + "43028", + "43031", + "43052", + "43054", + "43055", + "43060", + "43066", + "43067", + "43074", + "43078", + "43079", + "43088", + "43091", + "43099", + "43101", + "43107", + "43108", + "43112", + "43114", + "43126", + "43136", + "43147", + "43169", + "43170", + "43182", + "43189", + "43202", + "43204", + "43212", + "43217", + "43228", + "43233", + "43235", + "43240", + "43243", + "43262", + "43264", + "43265", + "43272", + "43279", + "43288", + "43289", + "43291", + "43309", + "43311", + "43324", + "43331", + "43335", + "43338", + "43350", + "43357", + "43364", + "43372", + "43380", + "43381", + "43382", + "43385", + "43392", + "43393", + "43395", + "43399", + "43400", + "43401", + "43402", + "43412", + "43427", + "43428", + "43432", + "43443", + "43446", + "43450", + "43454", + "43457", + "43462", + "43467", + "43469", + "43470", + "43486", + "43488", + "43491", + "43494", + "43500", + "43505", + "43521", + "43522", + "43523", + "43527", + "43532", + "43538", + "43562", + "43564", + "43565", + "43571", + "43574", + "43581", + "43582", + "43588", + "43591", + "43592", + "43597", + "43601", + "43602", + "43604", + "43606", + "43607", + "43612", + "43628", + "43634", + "43644", + "43653", + "43654", + "43667", + "43676", + "43688", + "43689", + "43695", + "43710", + "43711", + "43713", + "43716", + "43717", + "43723", + "43733", + "43742", + "43751", + "43760", + "43771", + "43778", + "43783", + "43791", + "43798", + "43802", + "43805", + "43806", + "43819", + "43821", + "43825", + "43833", + "43837", + "43839", + "43854", + "43856", + "43859", + "43862", + "43864", + "43866", + "43870", + "43872", + "43874", + "43879", + "43887", + "43890", + "43897", + "43900", + "43908", + "43911", + "43915", + "43920", + "43928", + "43934", + "43938", + "43943", + "43946", + "43949", + "43955", + "43956", + "43960", + "43974", + "43982", + "43999", + "44007", + "44022", + "44026", + "44040", + "44042", + "44044", + "44045", + "44053", + "44054", + "44056", + "44057", + "44060", + "44061", + "44066", + "44078", + "44079", + "44084", + "44087", + "44096", + "44100", + "44102", + "44114", + "44130", + "44134", + "44135", + "44156", + "44163", + "44169", + "44172", + "44174", + "44187", + "44192", + "44200", + "44201", + "44202", + "44203", + "44216", + "44217", + "44220", + "44223", + "44224", + "44227", + "44230", + "44238", + "44242", + "44243", + "44244", + "44247", + "44255", + "44268", + "44269", + "44275", + "44278", + "44279", + "44281", + "44285", + "44286", + "44289", + "44294", + "44301", + "44307", + "44318", + "44319", + "44320", + "44334", + "44338", + "44339", + "44342", + "44350", + "44353", + "44354", + "44356", + "44362", + "44366", + "44367", + "44373", + "44374", + "44377", + "44390", + "44394", + "44400", + "44402", + "44405", + "44410", + "44415", + "44427", + "44429", + "44435", + "44441", + "44446", + "44458", + "44465", + "44467", + "44469", + "44471", + "44473", + "44480", + "44483", + "44496", + "44498", + "44508", + "44510", + "44515", + "44523", + "44524", + "44536", + "44555", + "44556", + "44559", + "44560", + "44561", + "44562", + "44569", + "44570", + "44574", + "44580", + "44587", + "44603", + "44608", + "44613", + "44617", + "44619", + "44624", + "44625", + "44629", + "44636", + "44638", + "44640", + "44641", + "44648", + "44654", + "44656", + "44663", + "44673", + "44691", + "44705", + "44708", + "44717", + "44748", + "44761", + "44762", + "44770", + "44772", + "44775", + "44778", + "44780", + "44784", + "44786", + "44787", + "44803", + "44811", + "44818", + "44829", + "44831", + "44833", + "44837", + "44849", + "44851", + "44852", + "44857", + "44858", + "44859", + "44861", + "44862", + "44870", + "44875", + "44882", + "44887", + "44893", + "44897", + "44898", + "44905", + "44909", + "44915", + "44916", + "44917", + "44918", + "44934", + "44936", + "44937", + "44938", + "44940", + "44949", + "44953", + "44959", + "44964", + "44972", + "44973", + "44974", + "44978", + "44984", + "44992", + "44995", + "44997", + "45020", + "45024", + "45028", + "45031", + "45048", + "45051", + "45068", + "45071", + "45076", + "45077", + "45079", + "45080", + "45087", + "45088", + "45099", + "45102", + "45104", + "45116", + "45122", + "45128", + "45136", + "45145", + "45150", + "45151", + "45158", + "45168", + "45170", + "45173", + "45179", + "45182", + "45183", + "45184", + "45185", + "45189", + "45207", + "45208", + "45210", + "45220", + "45231", + "45261", + "45264", + "45266", + "45269", + "45271", + "45289", + "45291", + "45295", + "45296", + "45309", + "45315", + "45316", + "45329", + "45345", + "45347", + "45350", + "45353", + "45364", + "45365", + "45366", + "45367", + "45370", + "45377", + "45378", + "45381", + "45388", + "45390", + "45398", + "45409", + "45412", + "45415", + "45425", + "45430", + "45446", + "45453", + "45455", + "45463", + "45475", + "45478", + "45490", + "45497", + "45499", + "45500", + "45503", + "45514", + "45523", + "45532", + "45537", + "45539", + "45540", + "45541", + "45542", + "45551", + "45563", + "45566", + "45570", + "45577", + "45582", + "45586", + "45605", + "45611", + "45614", + "45619", + "45625", + "45628", + "45630", + "45632", + "45635", + "45637", + "45638", + "45639", + "45644", + "45648", + "45649", + "45661", + "45667", + "45668", + "45671", + "45675", + "45691", + "45695", + "45703", + "45705", + "45707", + "45708", + "45715", + "45718", + "45719", + "45726", + "45729", + "45730", + "45731", + "45736", + "45741", + "45747", + "45755", + "45759", + "45761", + "45768", + "45769", + "45770", + "45771", + "45777", + "45781", + "45786", + "45802", + "45810", + "45813", + "45818", + "45821", + "45833", + "45835", + "45846", + "45848", + "45853", + "45871", + "45888", + "45890", + "45896", + "45897", + "45905", + "45909", + "45911", + "45915", + "45917", + "45919", + "45923", + "45925", + "45928", + "45930", + "45944", + "45950", + "45958", + "45959", + "45966", + "45967", + "45972", + "45976", + "45984", + "45987", + "45988", + "45992", + "45995", + "45997", + "46006", + "46009", + "46011", + "46019", + "46020", + "46022", + "46024", + "46030", + "46038", + "46042", + "46055", + "46058", + "46063", + "46067", + "46070", + "46071", + "46073", + "46078", + "46081", + "46089", + "46090", + "46092", + "46101", + "46105", + "46113", + "46118", + "46124", + "46131", + "46133", + "46139", + "46142", + "46144", + "46147", + "46158", + "46159", + "46161", + "46162", + "46164", + "46167", + "46179", + "46181", + "46182", + "46187", + "46214", + "46216", + "46218", + "46220", + "46232", + "46233", + "46246", + "46247", + "46248", + "46249", + "46251", + "46256", + "46264", + "46268", + "46279", + "46286", + "46292", + "46299", + "46301", + "46302", + "46311", + "46316", + "46325", + "46327", + "46333", + "46338", + "46342", + "46344", + "46351", + "46366", + "46369", + "46378", + "46380", + "46381", + "46382", + "46383", + "46388", + "46395", + "46408", + "46415", + "46417", + "46421", + "46422", + "46426", + "49162", + "49168", + "49169", + "49170", + "49178", + "49185", + "49186", + "49191", + "49194", + "49196", + "49198", + "49210", + "49218", + "49219", + "49223", + "49228", + "49239", + "49243", + "49249", + "49260", + "49267", + "49272", + "49278", + "49286", + "49297", + "49305", + "49306", + "49308", + "49319", + "49323", + "49327", + "49333", + "49341", + "49343", + "49344", + "49347", + "49356", + "49367", + "49369", + "49371", + "49396", + "49399", + "49401", + "49404", + "49405", + "49413", + "49416", + "49422", + "49426", + "49431", + "49434", + "49444", + "49445", + "49453", + "49459", + "49465", + "49468", + "49469", + "49480", + "49482", + "49491", + "49493", + "49503", + "49504", + "49506", + "49509", + "49511", + "49522", + "49525", + "49533", + "49538", + "49543", + "49561", + "49572", + "49576", + "49577", + "49579", + "49580", + "49585", + "49587", + "49593", + "49599", + "49609", + "49613", + "49618", + "49622", + "49636", + "49637", + "49645", + "49657", + "49683", + "49685", + "49695", + "49703", + "49708", + "49709", + "49720", + "49733", + "49737", + "49748", + "49754", + "49755", + "49761", + "49775", + "49776", + "49783", + "49798", + "49801", + "49808", + "49812", + "49815", + "49828", + "49833", + "49840", + "49841", + "49844", + "49849", + "49857", + "49861", + "49864", + "49866", + "49876", + "49890", + "49904", + "49914", + "49922", + "49931", + "49947", + "49951", + "49953", + "49964", + "49965", + "49972", + "49973", + "49978", + "49986", + "49996", + "50002", + "50007", + "50013", + "50017", + "50018", + "50034", + "50035", + "50037", + "50054", + "50063", + "50080", + "50081", + "50084", + "50098", + "50105", + "50107", + "50109", + "50110", + "50121", + "50123", + "50127", + "50138", + "50145", + "50147", + "50148", + "50154", + "50155", + "50160", + "50162", + "50166", + "50173", + "50181", + "50187", + "50188", + "50203", + "50213", + "50220", + "50229", + "50241", + "50247", + "50254", + "50268", + "50276", + "50289", + "50292", + "50299", + "50314", + "50320", + "50325", + "50346", + "50352", + "50353", + "50361", + "50368", + "50369", + "50372", + "50374", + "50378", + "50407", + "50408", + "50410", + "50418", + "50420", + "50425", + "50426", + "50432", + "50435", + "50440", + "50450", + "50451", + "50455", + "50463", + "50468", + "50472", + "50475", + "50482", + "50488", + "50497", + "50501", + "50503", + "50504", + "50519", + "50521", + "50528", + "50537", + "50540", + "50542", + "50545", + "50554", + "50559", + "50564", + "50566", + "50571", + "50575", + "50579", + "50590", + "50599", + "50603", + "50620", + "50624", + "50626", + "50637", + "50639", + "50640", + "50645", + "50649", + "50651", + "50663", + "50669", + "50687", + "50692", + "50695", + "50703", + "50712", + "50721", + "50724", + "50734", + "50743", + "50744", + "50762", + "50764", + "50767", + "50769", + "50773", + "50775", + "50776", + "50780", + "50792", + "50794", + "50803", + "50808", + "50810", + "50814", + "50817", + "50819", + "50824", + "50828", + "50832", + "50834", + "50852", + "50861", + "50867", + "50873", + "50875", + "50882", + "50899", + "50904", + "50909", + "50913", + "50921", + "50925", + "50927", + "50930", + "50936", + "50942", + "50944", + "50947", + "50952", + "50953", + "50961", + "50962", + "50975", + "50978", + "50981", + "50987", + "50994", + "51004", + "51008", + "51010", + "51011", + "51022", + "51024", + "51028", + "51032", + "51033", + "51034", + "51040", + "51041", + "51048", + "51050", + "51054", + "51070", + "51071", + "51078", + "51086", + "51087", + "51093", + "51094", + "51097", + "51110", + "51112", + "51114", + "51116", + "51117", + "51121", + "51122", + "51124", + "51132", + "51136", + "51138", + "51149", + "51156", + "51179", + "51198", + "51201", + "51202", + "51204", + "51210", + "51213", + "51217", + "51218", + "51220", + "51222", + "51228", + "51229", + "51241", + "51252", + "51261", + "51263", + "51268", + "51291", + "51292", + "51301", + "51311", + "51314", + "51316", + "51327", + "51348", + "51363", + "51371", + "51372", + "51378", + "51379", + "51384", + "51388", + "51389", + "51391", + "51400", + "51402", + "51411", + "51424", + "51425", + "51426", + "51429", + "51430", + "51435", + "51438", + "51447", + "51453", + "51459", + "51464", + "51465", + "51469", + "51476", + "51478", + "51481", + "51487", + "51493", + "51494", + "51497", + "51501", + "51503", + "51508", + "51513", + "51520", + "51523", + "51529", + "51533", + "51535", + "51537", + "51538", + "51547", + "51554", + "51559", + "51567", + "51586", + "51588", + "51589", + "51598", + "51605", + "51611", + "51616", + "51621", + "51626", + "51628", + "51634", + "51641", + "51648", + "51649", + "51671", + "51681", + "51688", + "51692", + "51700", + "51702", + "51713", + "51719", + "51723", + "51729", + "51732", + "51733", + "51748", + "51751", + "51755", + "51764", + "51769", + "51772", + "51773", + "51777", + "51778", + "51780", + "51789", + "51792", + "51803", + "51806", + "51817", + "51825", + "51833", + "51835", + "51836", + "51841", + "51847", + "51849", + "51852", + "51855", + "51856", + "51859", + "51861", + "51863", + "51864", + "51872", + "51877", + "51881", + "51887", + "51892", + "51897", + "51904", + "51906", + "51908", + "51912", + "51917", + "51926", + "51928", + "51929", + "51948", + "51951", + "51964", + "51971", + "51972", + "51973", + "51974", + "51975", + "51990", + "51992", + "51996", + "52000", + "52013", + "52021", + "52026", + "52030", + "52036", + "52039", + "52058", + "52060", + "52064", + "52070", + "52081", + "52082", + "52089", + "52092", + "52097", + "52104", + "52106", + "52116", + "52121", + "52122", + "52127", + "52133", + "52134", + "52140", + "52148", + "52152", + "52156", + "52161", + "52162", + "52167", + "52169", + "52173", + "52192", + "52193", + "52196", + "52209", + "52218", + "52228", + "52249", + "52253", + "52260", + "52261", + "52267", + "52269", + "52271", + "52272", + "52273", + "52288", + "52290", + "52301", + "52305", + "52306", + "52313", + "52315", + "52319", + "52322", + "52330", + "52342", + "52346", + "52351", + "52354", + "52363", + "52382", + "52386", + "52390", + "52392", + "52409", + "52427", + "52428", + "52436", + "52459", + "52462", + "52465", + "52485", + "52488", + "52500", + "52502", + "52506", + "52511", + "52516", + "52518", + "52520", + "52524", + "52525", + "52530", + "52548", + "52554", + "52555", + "52563", + "52572", + "52578", + "52584", + "52586", + "52587", + "52589", + "52591", + "52593", + "52609", + "52615", + "52617", + "52623", + "52628", + "52629", + "52631", + "52640", + "52648", + "52649", + "52651", + "52658", + "52670", + "52673", + "52676", + "52681", + "52686", + "52690", + "52698", + "52699", + "52710", + "52712", + "52729", + "52734", + "52742", + "52753", + "52755", + "52763", + "52770", + "52779", + "52781", + "52790", + "52793", + "52802", + "52804", + "52808", + "52817", + "52821", + "52834", + "52835", + "52837", + "52857", + "52858", + "52860", + "52863", + "52872", + "52873", + "52874", + "52878", + "52880", + "52890", + "52893", + "52907", + "52908", + "52911", + "52914", + "52925", + "52930", + "52931", + "52932", + "52936", + "52945", + "52961", + "52966", + "52967", + "52974", + "52976", + "52978", + "52981", + "52983", + "53002", + "53010", + "53022", + "53025", + "53028", + "53029", + "53030", + "53034", + "53039", + "53041", + "53042", + "53059", + "53066", + "53078", + "53081", + "53086", + "53087", + "53089", + "53093", + "53097", + "53099", + "53104", + "53114", + "53115", + "53116", + "53119", + "53121", + "53140", + "53145", + "53162", + "53172", + "53175", + "53180", + "53188", + "53190", + "53202", + "53203", + "53211", + "53212", + "53214", + "53221", + "53223", + "53233", + "53238", + "53239", + "53240", + "53242", + "53251", + "53252", + "53254", + "53255", + "53274", + "53290", + "53292", + "53294", + "53298", + "53301", + "53307", + "53313", + "53323", + "53334", + "53343", + "53367", + "53376", + "53382", + "53383", + "53392", + "53397", + "53405", + "53406", + "53408", + "53418", + "53419", + "53422", + "53423", + "53426", + "53428", + "53430", + "53432", + "53436", + "53443", + "53446", + "53451", + "53463", + "53464", + "53466", + "53469", + "53472", + "53474", + "53477", + "53492", + "53494", + "53497", + "53500", + "53509", + "53510", + "53515", + "53518", + "53535", + "53540", + "53550", + "53554", + "53569", + "53575", + "53582", + "53588", + "53609", + "53615", + "53617", + "53624", + "53629", + "53642", + "53647", + "53648", + "53654", + "53656", + "53657", + "53658", + "53659", + "53663", + "53673", + "53678", + "53680", + "53682", + "53686", + "53701", + "53703", + "53706", + "53711", + "53712", + "53729", + "53731", + "53734", + "53750", + "53763", + "53772", + "53777", + "53781", + "53786", + "53791", + "53796", + "53798", + "53803", + "53818", + "53823", + "53830", + "53832", + "53845", + "53847", + "53852", + "53858", + "53861", + "53867", + "53870", + "53879", + "53881", + "53884", + "53889", + "53895", + "53904", + "53918", + "53921", + "53925", + "53928", + "53930", + "53932", + "53933", + "53950", + "53955", + "53962", + "53963", + "53969", + "53972", + "53986", + "53992", + "53996", + "54024", + "54027", + "54029", + "54030", + "54032", + "54033", + "54035", + "54044", + "54047", + "54048", + "54049", + "54066", + "54067", + "54068", + "54072", + "54076", + "54078", + "54082", + "54086", + "54095", + "54109", + "54127", + "54132", + "54140", + "54141", + "54145", + "54148", + "54149", + "54155", + "54165", + "54187", + "54192", + "54194", + "54204", + "54213", + "54218", + "54225", + "54232", + "54251", + "54255", + "54259", + "54262", + "54270", + "54276", + "54279", + "54282", + "54285", + "54287", + "54293", + "54298", + "54301", + "54303", + "54304", + "54308", + "54312", + "54319", + "54334", + "54345", + "54348", + "54353", + "54354", + "54357", + "54361", + "54368", + "54374", + "54379", + "54383", + "54385", + "54392", + "54396", + "54397", + "54453", + "54462", + "54463", + "54467", + "54472", + "54481", + "54493", + "54495", + "54497", + "54499", + "54506", + "54511", + "54515", + "54523", + "54531", + "54532", + "54534", + "54535", + "54547", + "54549", + "54554", + "54565", + "54567", + "54580", + "54584", + "54585", + "54586", + "54599", + "54600", + "54601", + "54602", + "54607", + "54610", + "54615", + "54621", + "54628", + "54631", + "54636", + "54637", + "54640", + "54644", + "54645", + "54652", + "54655", + "54661", + "54669", + "54672", + "54676", + "54680", + "54689", + "54696", + "54700", + "54714", + "54716", + "54719", + "54721", + "54724", + "54729", + "54754", + "54756", + "54757", + "54762", + "54767", + "54769", + "54775", + "54776", + "54780", + "54787", + "54804", + "54812", + "54816", + "54837", + "54838", + "54842", + "54846", + "54847", + "54852", + "54863", + "54865", + "54869", + "54877", + "54888", + "54889", + "54891", + "54902", + "54905", + "54930", + "54931", + "54933", + "54939", + "54940", + "54948", + "54963", + "54964", + "54965", + "54967", + "54979", + "55003", + "55012", + "55016", + "55019", + "55022", + "55023", + "55024", + "55026", + "55038", + "55041", + "55043", + "55079", + "55096", + "55109", + "55116", + "55122", + "55123", + "55128", + "55134", + "55142", + "55145", + "55146", + "55147", + "55152", + "55165", + "55166", + "55182", + "55189", + "55190", + "55194", + "55200", + "55213", + "55222", + "55235", + "55250", + "55253", + "55254", + "55256", + "55261", + "55267", + "55269", + "55271", + "55278", + "55279", + "55281", + "55283", + "55296", + "55309", + "55310", + "55312", + "55315", + "55317", + "55329", + "55340", + "55346", + "55351", + "55352", + "55357", + "55364", + "55366", + "55371", + "55378", + "55379", + "55386", + "55391", + "55395", + "55397", + "55414", + "55419", + "55423", + "55437", + "55439", + "55443", + "55457", + "55465", + "55467", + "55470", + "55476", + "55480", + "55482", + "55503", + "55504", + "55514", + "55515", + "55523", + "55526", + "55537", + "55541", + "55544", + "55551", + "55565", + "55590", + "55592", + "55595", + "55627", + "55635", + "55638", + "55640", + "55642", + "55643", + "55644", + "55656", + "55661", + "55662", + "55668", + "55669", + "55672", + "55675", + "55689", + "55692", + "55715", + "55719", + "55720", + "55723", + "55725", + "55726", + "55728", + "55730", + "55733", + "55736", + "55737", + "55740", + "55751", + "55753", + "55759", + "55762", + "55767", + "55776", + "55785", + "55786", + "55805", + "55806", + "55807", + "55808", + "55822", + "55823", + "55824", + "55832", + "55852", + "55858", + "55860", + "55864", + "55869", + "55871", + "55873", + "55883", + "55884", + "55893", + "55895", + "55905", + "55912", + "55914", + "55923", + "55931", + "55932", + "55938", + "55940", + "55941", + "55942", + "55950", + "55955", + "55963", + "55973", + "55987", + "55991", + "56000", + "56002", + "56004", + "56009", + "56010", + "56013", + "56032", + "56035", + "56037", + "56038", + "56040", + "56057", + "56063", + "56064", + "56066", + "56067", + "56073", + "56074", + "56076", + "56086", + "56088", + "56094", + "56097", + "56110", + "56113", + "56114", + "56123", + "56124", + "56125", + "56142", + "56150", + "56161", + "56174", + "56178", + "56188", + "56191", + "56196", + "56198", + "56203", + "56204", + "56222", + "56227", + "56231", + "56233", + "56234", + "56239", + "56243", + "56244", + "56251", + "56262", + "56269", + "56273", + "56275", + "56276", + "56277", + "56279", + "56280", + "56281", + "56289", + "56301", + "56302", + "56304", + "56310", + "56320", + "56323", + "56333", + "56335", + "56338", + "56342", + "56348", + "56355", + "56357", + "56359", + "56360", + "56362", + "56363", + "56365", + "56376", + "56381", + "56383", + "56385", + "56395", + "56401", + "56405", + "56419", + "56421", + "56425", + "56426", + "56429", + "56433", + "56446", + "56449", + "56461", + "56464", + "56469", + "56474", + "56482", + "56484", + "56488", + "56494", + "56503", + "56504", + "56509", + "56510", + "56512", + "56515", + "56518", + "56520", + "56534", + "56536", + "56537", + "56539", + "56545", + "56546", + "56553", + "56555", + "56567", + "56577", + "56579", + "56589", + "56590", + "56594", + "56608", + "56612", + "56615", + "56630", + "56637", + "56644", + "56645", + "56650", + "56660", + "56670", + "56674", + "56682", + "56685", + "56686", + "56691", + "56692", + "56705", + "56708", + "56711", + "56712", + "56720", + "56724", + "56731", + "56739", + "56741", + "56751", + "56753", + "56766", + "56771", + "56778", + "56781", + "56788", + "56795", + "56796", + "56803", + "56807", + "56814", + "56816", + "56825", + "56836", + "56840", + "56845", + "56877", + "56878", + "56888", + "56890", + "56896", + "56901", + "56903", + "56906", + "56916", + "56921", + "56930", + "56937", + "56940", + "56944", + "56945", + "56949", + "56960", + "56962", + "56969", + "56970", + "56975", + "56976", + "56983", + "56986", + "56991", + "57001", + "57010", + "57016", + "57018", + "57029", + "57036", + "57039", + "57053", + "57058", + "57060", + "57065", + "57067", + "57069", + "57070", + "57073", + "57074", + "57081", + "57085", + "57097", + "57104", + "57123", + "57137", + "57145", + "57146", + "57148", + "57151", + "57166", + "57175", + "57176", + "57180", + "57183", + "57193", + "57198", + "57199", + "57201", + "57206", + "57216", + "57221", + "57223", + "57224", + "57229", + "57233", + "57237", + "57247", + "57253", + "57260", + "57263", + "57277", + "57281", + "57283", + "57288", + "57296", + "57302", + "57313", + "57315", + "57317", + "57322", + "57323", + "57328", + "57329", + "57350", + "57353", + "57358", + "57360", + "57361", + "57362", + "57366", + "57383", + "57392", + "57404", + "57419", + "57420", + "57433", + "57434", + "57435", + "57438", + "57444", + "57456", + "57468", + "57474", + "57480", + "57485", + "57489", + "57500", + "57510", + "57512", + "57532", + "57537", + "57550", + "57559", + "57560", + "57567", + "57572", + "57574", + "57575", + "57579", + "57583", + "57585", + "57586", + "57588", + "57592", + "57602", + "57604", + "57607", + "57612", + "57622", + "57623", + "57626", + "57636", + "57639", + "57640", + "57648", + "57658", + "57660", + "57670", + "57673", + "57674", + "57688", + "57689", + "57692", + "57702", + "57703", + "57707", + "57713", + "57718", + "57729", + "57733", + "57736", + "57744", + "57746", + "57751", + "57752", + "57756", + "57766", + "57771", + "57773", + "57776", + "57791", + "57792", + "57794", + "57804", + "57806", + "57811", + "57814", + "57824", + "57827", + "57829", + "57830", + "57831", + "57838", + "57840", + "57841", + "57843", + "57846", + "57848", + "57863", + "57870", + "57871", + "57877", + "57880", + "57889", + "57895", + "57897", + "57906", + "57915", + "57920", + "57930", + "57933", + "57934", + "57937", + "57938", + "57942", + "57950", + "57952", + "57955", + "57961", + "57964", + "57966", + "57974", + "57979", + "57986", + "57989", + "57996", + "58000", + "58007", + "58008", + "58016", + "58028", + "58040", + "58041", + "58042", + "58059", + "58068", + "58069", + "58080", + "58082", + "58090", + "58097", + "58101", + "58114", + "58116", + "58117", + "58119", + "58124", + "58130", + "58132", + "58137", + "58147", + "58155", + "58158", + "58159", + "58160", + "58165", + "58172", + "58178", + "58179", + "58181", + "58182", + "58187", + "58190", + "58216", + "58227", + "58229", + "58237", + "58248", + "58254", + "58259", + "58275", + "58282", + "58294", + "58297", + "58302", + "58311", + "58316", + "58318", + "58319", + "58321", + "58327", + "58356", + "58369", + "58381", + "58394", + "58395", + "58398", + "58403", + "58404", + "58421", + "58430", + "58434", + "58435", + "58448", + "58453", + "58455", + "58466", + "58469", + "58478", + "58480", + "58486", + "58495", + "58497", + "58499", + "58503", + "58505", + "58507", + "58513", + "58522", + "58523", + "58524", + "58533", + "58535", + "58540", + "58543", + "58551", + "58552", + "58560", + "58586", + "58593", + "58601", + "58602", + "58603", + "58614", + "58618", + "58638", + "58640", + "58644", + "58646", + "58647", + "58654", + "58655", + "58656", + "58658", + "58676", + "58677", + "58678", + "58687", + "58690", + "58692", + "58694", + "58700", + "58706", + "58734", + "58735", + "58738", + "58740", + "58752", + "58761", + "58764", + "58772", + "58776", + "58787", + "58797", + "58815", + "58821", + "58824", + "58832", + "58835", + "58839", + "58840", + "58843", + "58846", + "58854", + "58858", + "58861", + "58865", + "58871", + "58872", + "58887", + "58890", + "58891", + "58908", + "58914", + "58919", + "58924", + "58928", + "58931", + "58939", + "58942", + "58952", + "58954", + "58961", + "58963", + "58965", + "58966", + "58967", + "58974", + "58986", + "59000", + "59003", + "59006", + "59007", + "59016", + "59036", + "59039", + "59046", + "59050", + "59051", + "59054", + "59055", + "59058", + "59059", + "59067", + "59069", + "59070", + "59071", + "59072", + "59074", + "59081", + "59082", + "59085", + "59086", + "59088", + "59092", + "59093", + "59096", + "59099", + "59101", + "59105", + "59113", + "59123", + "59124", + "59130", + "59133", + "59134", + "59135", + "59137", + "59139", + "59141", + "59142", + "59144", + "59147", + "59149", + "59151", + "59153", + "59162", + "59172", + "59179", + "59182", + "59184", + "59200", + "59203", + "59206", + "59213", + "59234", + "59238", + "59239", + "59241", + "59253", + "59257", + "59261", + "59263", + "59269", + "59283", + "59289", + "59291", + "59292", + "59298", + "59299", + "59304", + "59308", + "59310", + "59311", + "59318", + "59320", + "59323", + "59326", + "59327", + "59329", + "59332", + "59334", + "59337", + "59341", + "59342", + "59348", + "59351", + "59353", + "59368", + "59371", + "59386", + "59398", + "59415", + "59417", + "59419", + "59423", + "59443", + "59445", + "59450", + "59453", + "59456", + "59461", + "59465", + "59472", + "59479", + "59480", + "59481", + "59487", + "59501", + "59502", + "59513", + "59521", + "59523", + "59525", + "59537", + "59544", + "59556", + "59561", + "59562", + "59563", + "59567", + "59570", + "59574", + "59581", + "59588", + "59597", + "59600", + "59604", + "59606", + "59608", + "59615", + "59616", + "59633", + "59639", + "59640", + "59644", + "59645", + "59650", + "59654", + "59655", + "59657", + "59664", + "59666", + "59675", + "59676", + "59693", + "59695", + "59719", + "59727", + "59736", + "59747", + "59749", + "59751", + "59754", + "59757", + "59758", + "59766", + "59782", + "59785", + "59794", + "59795", + "59813", + "59821", + "59822", + "59823", + "59825", + "59834", + "59848", + "59858", + "59862", + "59879", + "59881", + "59886", + "59889", + "59892", + "59893", + "59897", + "59900", + "59901", + "59912", + "59922", + "59927", + "59932", + "59933", + "59941", + "59962", + "59966", + "59980", + "59997", + "59999", + "60010", + "60014", + "60020", + "60023", + "60039", + "60052", + "60067", + "60069", + "60075", + "60089", + "60102", + "60105", + "60107", + "60117", + "60119", + "60124", + "60128", + "60135", + "60148", + "60149", + "60154", + "60162", + "60164", + "60171", + "60175", + "60177", + "60183", + "60189", + "60195", + "60200", + "60209", + "60215", + "60218", + "60219", + "60226", + "60233", + "60241", + "60244", + "60245", + "60250", + "60251", + "60269", + "60270", + "60277", + "60280", + "60285", + "60286", + "60288", + "60289", + "60292", + "60301", + "60307", + "60313", + "60317", + "60318", + "60319", + "60322", + "60327", + "60329", + "60334", + "60351", + "60352", + "60355", + "60360", + "60369", + "60395", + "60396", + "60403", + "60407", + "60408", + "60418", + "60419", + "60421", + "60427", + "60428", + "60434", + "60436", + "60442", + "60443", + "60447", + "60456", + "60457", + "60461", + "60462", + "60471", + "60477", + "60479", + "60487", + "60492", + "60503", + "60507", + "60520", + "60529", + "60562", + "60566", + "60573", + "60576", + "60596", + "60604", + "60612", + "60619", + "60621", + "60629", + "60638", + "60651", + "60652", + "60653", + "60655", + "60662", + "60663", + "60667", + "60674", + "60680", + "60683", + "60687", + "60693", + "60696", + "60702", + "60705", + "60708", + "60714", + "60715", + "60726", + "60734", + "60744", + "60751", + "60753", + "60754", + "60757", + "60758", + "60771", + "60784", + "60789", + "60793", + "60802", + "60803", + "60814", + "60818", + "60828", + "60833", + "60837", + "60838", + "60841", + "60852", + "60858", + "60860", + "60864", + "60893", + "60895", + "60898", + "60910", + "60915", + "60919", + "60927", + "60930", + "60938", + "60939", + "60947", + "60950", + "60956", + "60957", + "60960", + "60967", + "60970", + "60972", + "60981", + "60985", + "60996", + "61005", + "61006", + "61008", + "61009", + "76940", + "77544", + "77646", + "77687", + "77845", + "78242", + "78262", + "78420", + "78693", + "79391", + "79432", + "79806", + "79902", + "79974", + "80186", + "80269", + "80294", + "80461", + "80496", + "80865", + "80941", + "80952", + "81038", + "81057", + "81174", + "81392", + "81544", + "81748", + "81939", + "82086", + "82194", + "82215", + "82391", + "82626", + "82763", + "82851", + "82877", + "82894", + "82965", + "83159", + "84447", + "84651", + "84657", + "84769", + "84781", + "84893", + "85046", + "85099", + "85105", + "85284", + "85285", + "85318", + "85457", + "85459", + "85645", + "85730", + "86116", + "86125", + "86243", + "86667", + "86991", + "87027", + "87381", + "87410", + "87424", + "87679", + "87820", + "87844", + "87873", + "87899", + "88232", + "88255", + "88268", + "88321", + "88395", + "88481", + "88566", + "89119", + "89418", + "89545", + "89700", + "89724", + "89760", + "90098", + "90328", + "90523", + "91139", + "91232", + "91457", + "91493", + "91545", + "91676", + "91752", + "91991", + "92215", + "92364", + "92517", + "92591", + "92772", + "92866", + "93049", + "93079", + "93203", + "93680", + "94170", + "94177", + "94351", + "94416", + "94436", + "94465", + "94664", + "95069", + "95673", + "95761", + "95926", + "95988", + "96001", + "96146", + "96307", + "96754", + "96972", + "96976", + "97021", + "97429", + "98083", + "98114", + "98252", + "98294", + "98398", + "98703", + "98784", + "99358", + "99418", + "99478", + "99932", + "99943" + ], + "seed": 42, + "val_ratio": 0.2, + "fusion_type": "lmf", + "loss_type": "sce", + "split": "stratified_group" +} \ No newline at end of file diff --git a/DMS/dinov3_siglip2_mlp/README.md b/DMS/dinov3_siglip2_mlp/README.md new file mode 100644 index 0000000000000000000000000000000000000000..35b2bdf9044a57391b434b410af5aec1399cbcbd --- /dev/null +++ b/DMS/dinov3_siglip2_mlp/README.md @@ -0,0 +1,52 @@ +# DINOv3-SigLIP2 + Concat + MLP on Apple Dense Material Segmentation + +A material-classification **fusion head** from SegObjectMaterial. It classifies the +material of a masked object from two frozen embeddings: + +| | | +|---|---| +| vision | DINOv3 ViT-L/16 (CLS token, frozen) -> 1024-d | +| language | SigLIP2 base text encoder over Qwen3-VL-8B captions (frozen) -> 768-d | +| head | Concat + MLP (`mlp`, defaults), 1,065,529 parameters | +| classes | 57 (Apple Dense Material Segmentation) | + +**This repo holds only the head.** Features must come from the same encoders, +captioner and prompts as training (see the SegObjectMaterial repository); the +encoders are downloaded from their own model pages under their own licenses. + +## Evaluation + +Held-out split recorded in `split.json` (source images never seen in training). +Single training run -- differences under ~0.5 mIoU points between heads are within +run-to-run noise. + +| mIoU | mAcc | eval samples | +|---|---|---| +| 0.4592 | 0.6453 | 186,231 | + +## Training + +```json +{ + "learning_rate": 5e-05, + "epochs": 50, + "batch_size": 32, + "weight_decay": 0.0001, + "lr_schedule": "constant", + "early_stopping_patience": 0, + "checkpoint": "best validation loss" +} +``` + +## Use + +```python +from utils.hub import load_head_from_hub # SegObjectMaterial repository +head, info = load_head_from_hub("s0um0r0y/SegObjectMaterial", "DMS/dinov3_siglip2_mlp") +logits = head(vision_features, language_features) # [B, 1024], [B, 768] +``` + +## Integrity + +- `model.safetensors` sha256 `24b04b492f455d44e9ee3dc13c98bade94181ec60d0ce7363c6e3ff0e9996341` +- source config `config/config_latest_models_mlp.toml`, code commit `1a8130c922267fb0786a33e3854a7e00763cc38f+dirty` diff --git a/DMS/dinov3_siglip2_mlp/config.toml b/DMS/dinov3_siglip2_mlp/config.toml new file mode 100644 index 0000000000000000000000000000000000000000..bf1b26b00d413b93724473ddd8cb1d7a8ed7a8c2 --- /dev/null +++ b/DMS/dinov3_siglip2_mlp/config.toml @@ -0,0 +1,64 @@ +# MLP-head twin of config/config.toml. +# SAME embedding cache -- the head type does not change the cached features, so +# nothing needs re-serializing. Only the checkpoint, TensorBoard dir and W&B run +# differ, so this run can never overwrite the gated checkpoint. + +# Apple DMS -- LATEST-MODELS pipeline: DINOv3 ViT-L/16 (1024) + Qwen3-VL -> SigLIP2 text (768) +# +# Pair this with: +# src/vision_stream_latest_models.py + src/language_stream_latest_models.py +# run_serialization_latest_models.py -> train_latest_models.py +# +# For the base DINOv2/CLIP pipeline (run_serialization.py -> train.py) use +# config/config_dinov2_clip.toml instead -- its vision_dim is 768, not 1024. + +[data] +dataset_type = "apple_dms" +image_dir = "/images" +mask_dir = "/labels" +# Rebuilt automatically on first run; the index now stores one entry per +# CONNECTED COMPONENT, so any pre-existing labels.json must be removed first. +labels_file = "/labels_instances.json" +# Separate cache: DINOv3 features are 1024-d and must not mix with the +# 768-d DINOv2 cache written by run_serialization.py. +tensor_cache_dir = "/tensor_cache_dir_latest_models" + +# Connected-component filtering (measured on 400 real DMS masks): +# keeping every component gives 7.5x more samples than the old per-(image,class) +# scheme -- 2.45M samples / 47 GB / ~7.5x the VLM captioning time -- because 69% +# of components are under 0.1% of the frame and crop to a few pixels. +# A component is kept when area >= max(min_instance_area, min_instance_frac * frame). +min_instance_area = 1000 # absolute pixel floor +min_instance_frac = 0.001 # and at least 0.1% of the frame +max_instances_per_class = 0 # 0 = keep all; set e.g. 3 to cap the long tail + + +[model] +# fusion head: "gated" (GMU) or "mlp" (concat+MLP). Read by train_latest_models.py; a contradicting --fusion flag is an error, so checkpoint_path can't hold the wrong head. +fusion = "mlp" +vision_dim = 1024 # DINOv3 ViT-L/16 CLS token +language_dim = 768 # SigLIP2 base text embedding +num_classes = 57 + +[training] +batch_size = 32 + +# Batch size for the OFFLINE SERIALIZATION pass, which is a completely different +# memory regime from training: it pushes full-resolution images through the 7B +# VLM, whereas [training].batch_size only moves cached 768-d vectors through a +# small MLP. Measured on the 23.6 GiB 4090 -- static weights 16.2 GiB, so only +# ~7.4 GiB is left: batch 8 peaks at 17.7 GiB, 16 at 19.2 GiB, and 32 OOMs. +# 8 leaves headroom for a labmate's job to coexist; raise to 16 on a free card. +serialization_batch_size = 8 +learning_rate = 5e-5 +epochs = 50 +train_ratio = 0.8 # 80% for training +val_ratio = 0.2 # 20% for validation +tensorboard_log_dir = "/dms_dinov3_siglip2_mlp" + +[inference] +checkpoint_path = "/best_model_dms_latest_mlp.pth" + +[logging] +wandb_project = "material-classification" +wandb_run_name = "dms-dinov3-siglip2-mlp" diff --git a/DMS/dinov3_siglip2_mlp/head.json b/DMS/dinov3_siglip2_mlp/head.json new file mode 100644 index 0000000000000000000000000000000000000000..4d6ab5aadad617f12c8a3bb0b0f09b0e7e585398 --- /dev/null +++ b/DMS/dinov3_siglip2_mlp/head.json @@ -0,0 +1,99 @@ +{ + "fusion": "mlp", + "head": "Concat + MLP", + "head_kwargs": {}, + "vision_dim": 1024, + "language_dim": 768, + "num_classes": 57, + "classes": [ + "No label", + "Animal skin", + "Bone/teeth/horn", + "Brickwork", + "Cardboard", + "Carpet/rug", + "Ceiling tile", + "Ceramic", + "Chalkboard/blackboard", + "Clutter", + "Concrete", + "Cork/corkboard", + "Engineered stone", + "Fabric/cloth", + "Fiberglass wool", + "Fire", + "Foliage", + "Food", + "Fur", + "Gemstone/quartz", + "Glass", + "Hair", + "I cannot tell", + "Ice", + "Leather", + "Liquid, non-water", + "Metal", + "Mirror", + "Not on list", + "Paint/plaster/enamel", + "Paper", + "Pearl", + "Photograph/painting", + "Plastic, clear", + "Plastic, non-clear", + "Rubber/latex", + "Sand", + "Skin/lips", + "Sky", + "Snow", + "Soap", + "Soil/mud", + "Sponge", + "Stone, natural", + "Stone, polished", + "Styrofoam", + "Tile", + "Wallpaper", + "Water", + "Wax", + "Whiteboard", + "Wicker", + "Wood", + "Wood, tree", + "Bad polygon", + "Multiple materials", + "Asphalt" + ], + "dataset": "Apple Dense Material Segmentation", + "dataset_key": "DMS", + "encoders": { + "vision": "DINOv3 ViT-L/16 (CLS token, frozen)", + "language": "SigLIP2 base text encoder over Qwen3-VL-8B captions (frozen)", + "short": "DINOv3-SigLIP2", + "slug": "dinov3_siglip2" + }, + "parameters": 1065529, + "training": { + "learning_rate": 5e-05, + "epochs": 50, + "batch_size": 32, + "weight_decay": 0.0001, + "lr_schedule": "constant", + "early_stopping_patience": 0, + "checkpoint": "best validation loss" + }, + "sha256": { + "safetensors": "24b04b492f455d44e9ee3dc13c98bade94181ec60d0ce7363c6e3ff0e9996341", + "pth": "025001457a82b8db2365a08e3691fc9dd6594978b8c8467deb6bbefe77bfdda5" + }, + "source": { + "config": "config/config_latest_models_mlp.toml", + "git_commit": "1a8130c922267fb0786a33e3854a7e00763cc38f+dirty", + "checkpoint_mtime": "2026-10-05T17:16:25" + }, + "metrics": { + "mIoU": 0.45922884101465977, + "mAcc": 0.6453263039159061, + "eval_samples": 186231 + } +} \ No newline at end of file diff --git a/DMS/dinov3_siglip2_mlp/metrics.json b/DMS/dinov3_siglip2_mlp/metrics.json new file mode 100644 index 0000000000000000000000000000000000000000..cd441df397627304c2fdbfc0a358d6b050bd9288 --- /dev/null +++ b/DMS/dinov3_siglip2_mlp/metrics.json @@ -0,0 +1,296 @@ +{ + "dataset": "DMS", + "checkpoint": "/best_model_dms_latest_mlp.pth", + "fusion_type": "mlp", + "num_eval_samples": 186231, + "mIoU": 0.45922884101465977, + "mAcc": 0.6453263039159061, + "per_class": { + "No label": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Animal skin": { + "accuracy": 0.6228070175438597, + "iou": 0.4303030303030303, + "support": 114 + }, + "Bone/teeth/horn": { + "accuracy": 0.7272727272727273, + "iou": 0.6153846153846154, + "support": 44 + }, + "Brickwork": { + "accuracy": 0.743521000893655, + "iou": 0.5187032418952618, + "support": 1119 + }, + "Cardboard": { + "accuracy": 0.7536656891495601, + "iou": 0.47155963302752296, + "support": 1023 + }, + "Carpet/rug": { + "accuracy": 0.8107396149949342, + "iou": 0.46921543332942417, + "support": 4935 + }, + "Ceiling tile": { + "accuracy": 0.8038229376257545, + "iou": 0.4615829000577701, + "support": 994 + }, + "Ceramic": { + "accuracy": 0.8287461773700305, + "iou": 0.613915857605178, + "support": 2289 + }, + "Chalkboard/blackboard": { + "accuracy": 0.7348837209302326, + "iou": 0.5683453237410072, + "support": 215 + }, + "Clutter": { + "accuracy": 0.49056603773584906, + "iou": 0.3291139240506329, + "support": 53 + }, + "Concrete": { + "accuracy": 0.5108827085852479, + "iou": 0.2779605263157895, + "support": 1654 + }, + "Cork/corkboard": { + "accuracy": 0.3333333333333333, + "iou": 0.2236842105263158, + "support": 51 + }, + "Engineered stone": { + "accuracy": 0.20224719101123595, + "iou": 0.11612903225806452, + "support": 89 + }, + "Fabric/cloth": { + "accuracy": 0.7791159343568025, + "iou": 0.7166741062370653, + "support": 22668 + }, + "Fiberglass wool": { + "accuracy": 0.3, + "iou": 0.17647058823529413, + "support": 20 + }, + "Fire": { + "accuracy": 0.86, + "iou": 0.5657894736842105, + "support": 50 + }, + "Foliage": { + "accuracy": 0.91170750680669, + "iou": 0.7855227882037533, + "support": 5142 + }, + "Food": { + "accuracy": 0.8782122905027933, + "iou": 0.6374695863746959, + "support": 895 + }, + "Fur": { + "accuracy": 0.8283062645011601, + "iou": 0.697265625, + "support": 431 + }, + "Gemstone/quartz": { + "accuracy": 0.66, + "iou": 0.23741007194244604, + "support": 50 + }, + "Glass": { + "accuracy": 0.7552497225305217, + "iou": 0.6632617256033374, + "support": 22525 + }, + "Hair": { + "accuracy": 0.976099706744868, + "iou": 0.9226611226611227, + "support": 6820 + }, + "I cannot tell": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Ice": { + "accuracy": 0.5818181818181818, + "iou": 0.47058823529411764, + "support": 55 + }, + "Leather": { + "accuracy": 0.7282099343955014, + "iou": 0.4223973905952704, + "support": 2134 + }, + "Liquid, non-water": { + "accuracy": 0.4444444444444444, + "iou": 0.2857142857142857, + "support": 36 + }, + "Metal": { + "accuracy": 0.8286624903835587, + "iou": 0.5417445035206208, + "support": 9099 + }, + "Mirror": { + "accuracy": 0.6976160602258469, + "iou": 0.40942562592047127, + "support": 797 + }, + "Not on list": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Paint/plaster/enamel": { + "accuracy": 0.5956443857829735, + "iou": 0.5289685197588747, + "support": 31821 + }, + "Paper": { + "accuracy": 0.8389350787192641, + "iou": 0.6866719756750886, + "support": 11306 + }, + "Pearl": { + "accuracy": 0.0, + "iou": 0.0, + "support": 1 + }, + "Photograph/painting": { + "accuracy": 0.7231875374475734, + "iou": 0.37542768273716953, + "support": 1669 + }, + "Plastic, clear": { + "accuracy": 0.6890965732087228, + "iou": 0.41925701288855194, + "support": 1605 + }, + "Plastic, non-clear": { + "accuracy": 0.6375796178343949, + "iou": 0.5135088919288646, + "support": 14130 + }, + "Rubber/latex": { + "accuracy": 0.625349487418453, + "iou": 0.330704780680138, + "support": 1073 + }, + "Sand": { + "accuracy": 0.3181818181818182, + "iou": 0.24561403508771928, + "support": 88 + }, + "Skin/lips": { + "accuracy": 0.978847618241814, + "iou": 0.9362304766529093, + "support": 11819 + }, + "Sky": { + "accuracy": 0.9220055710306406, + "iou": 0.6768916155419223, + "support": 2154 + }, + "Snow": { + "accuracy": 0.6972477064220184, + "iou": 0.4342857142857143, + "support": 109 + }, + "Soap": { + "accuracy": 0.14285714285714285, + "iou": 0.14285714285714285, + "support": 7 + }, + "Soil/mud": { + "accuracy": 0.6636225266362252, + "iou": 0.40671641791044777, + "support": 657 + }, + "Sponge": { + "accuracy": 0.3888888888888889, + "iou": 0.2916666666666667, + "support": 18 + }, + "Stone, natural": { + "accuracy": 0.6445536445536445, + "iou": 0.44040290990486847, + "support": 1221 + }, + "Stone, polished": { + "accuracy": 0.4167758846657929, + "iou": 0.2550120288692863, + "support": 763 + }, + "Styrofoam": { + "accuracy": 0.16129032258064516, + "iou": 0.1111111111111111, + "support": 31 + }, + "Tile": { + "accuracy": 0.6460253957209949, + "iou": 0.43668430335097, + "support": 5749 + }, + "Wallpaper": { + "accuracy": 0.5967261904761905, + "iou": 0.348695652173913, + "support": 672 + }, + "Water": { + "accuracy": 0.6730987514188422, + "iou": 0.5188101487314086, + "support": 881 + }, + "Wax": { + "accuracy": 0.8771929824561403, + "iou": 0.6535947712418301, + "support": 114 + }, + "Whiteboard": { + "accuracy": 0.6906906906906907, + "iou": 0.4536489151873767, + "support": 333 + }, + "Wicker": { + "accuracy": 0.8132231404958677, + "iou": 0.5934861278648975, + "support": 605 + }, + "Wood": { + "accuracy": 0.7876215969184566, + "iou": 0.6349807884625507, + "support": 15317 + }, + "Wood, tree": { + "accuracy": 0.7363945578231292, + "iou": 0.4959908361970218, + "support": 588 + }, + "Bad polygon": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Multiple materials": { + "accuracy": 0.0, + "iou": 0.0, + "support": 0 + }, + "Asphalt": { + "accuracy": 0.5, + "iou": 0.32038834951456313, + "support": 198 + } + }, + "config": "config/config_latest_models_mlp.toml" +} \ No newline at end of file diff --git a/DMS/dinov3_siglip2_mlp/model.pth b/DMS/dinov3_siglip2_mlp/model.pth new file mode 100644 index 0000000000000000000000000000000000000000..546df3020c9e70e7bb53a63e5d76f5b15cae452f --- /dev/null +++ b/DMS/dinov3_siglip2_mlp/model.pth @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:025001457a82b8db2365a08e3691fc9dd6594978b8c8467deb6bbefe77bfdda5 +size 4274254 diff --git a/DMS/dinov3_siglip2_mlp/model.safetensors b/DMS/dinov3_siglip2_mlp/model.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..764ebe1643b1a1fba8e31e3d3ecd522cec64a4ea --- /dev/null +++ b/DMS/dinov3_siglip2_mlp/model.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24b04b492f455d44e9ee3dc13c98bade94181ec60d0ce7363c6e3ff0e9996341 +size 4269548 diff --git a/DMS/dinov3_siglip2_mlp/split.json b/DMS/dinov3_siglip2_mlp/split.json new file mode 100644 index 0000000000000000000000000000000000000000..d576c18b525d583ad4ca9779d3d7652f29a3ff66 --- /dev/null +++ b/DMS/dinov3_siglip2_mlp/split.json @@ -0,0 +1,8271 @@ +{ + "val_groups": [ + "100023", + "100684", + "100767", + "100806", + "101108", + "101397", + "101542", + "101771", + "102242", + "102298", + "102300", + "102441", + "102723", + "102859", + "102949", + "103045", + "103061", + "103310", + "103351", + "103376", + "103416", + "103494", + "103686", + "103990", + "104894", + "104911", + "104917", + "105053", + "105099", + "105227", + "105355", + "105416", + "105696", + "106358", + "106446", + "106475", + "106484", + "106527", + "106788", + "106933", + "107102", + "107279", + "107305", + "107566", + "107782", + "107866", + "108158", + "108647", + "109239", + "109695", + "109726", + "109789", + "109812", + "109881", + "109999", + "110235", + "110322", + "110893", + "111049", + "111228", + "111280", + "111386", + "112424", + "112448", + "112457", + "112665", + "112857", + "113143", + "113524", + "113793", + "113890", + "114202", + "114224", + "114225", + "114241", + "114705", + "114774", + "115020", + "115498", + "115499", + "115760", + "116168", + "116191", + "116298", + "116449", + "116606", + "116733", + "117104", + "117266", + "117505", + "117707", + "118431", + "119280", + "119283", + "119321", + "119466", + "119521", + "119533", + "119783", + "119809", + "119974", + "120020", + "120125", + "120312", + "120531", + "120550", + "120678", + "120808", + "121071", + "121220", + "121316", + "121985", + "122087", + "122094", + "122153", + "122404", + "122550", + "122844", + "122964", + "123297", + "123381", + "123445", + "123516", + "123601", + "123649", + "123702", + "124102", + "124157", + "124466", + "124752", + "125018", + "125522", + "125549", + "125597", + "125898", + "125979", + "125983", + "126186", + "126431", + "126648", + "126667", + "126907", + "126987", + "127294", + "127355", + "127396", + "127586", + "127669", + "127714", + "127973", + "128106", + "128229", + "128646", + "128868", + "129361", + "129605", + "129853", + "129906", + "129979", + "130273", + "130677", + "130702", + "130741", + "130972", + "131016", + "131115", + "131213", + "131299", + "131561", + "131598", + "131633", + "131677", + "132112", + "132235", + "132287", + "132495", + "132522", + "132602", + "132652", + "132730", + "132957", + "132980", + "133073", + "133187", + "133299", + "133571", + "133998", + "134034", + "134536", + "134647", + "134744", + "134773", + "134830", + "134835", + "134865", + "135254", + "135261", + "135282", + "135490", + "135709", + "136113", + "136415", + "136496", + "136599", + "136677", + "136726", + "136786", + "136847", + "136869", + "136995", + "137430", + "137533", + "137955", + "138677", + "138726", + "139100", + "139408", + "139623", + "139650", + "139653", + "139721", + "139748", + "139977", + "140398", + "140499", + "140727", + "140777", + "141064", + "141182", + "141248", + "141855", + "142040", + "142358", + "142418", + "142569", + "142763", + "142787", + "143098", + "143149", + "143193", + "143481", + "143614", + "143630", + "143668", + "143688", + "143821", + "143884", + "144224", + "144530", + "144759", + "144762", + "144978", + "145373", + "145421", + "145538", + "147431", + "147459", + "147723", + "147858", + "147868", + "148109", + "148756", + "148810", + "148826", + "149253", + "149401", + "149468", + "150308", + "150382", + "150544", + "150565", + "150607", + "150935", + "151054", + "151243", + "151309", + "151551", + "151581", + "151726", + "151871", + "152161", + "152558", + "152760", + "152845", + "153056", + "153383", + "153617", + "153763", + "154293", + "154636", + "154681", + "154850", + "154873", + "154992", + "155063", + "155394", + "155444", + "155476", + "155920", + "156257", + "156261", + "156366", + "156674", + "157619", + "157688", + "157961", + "158086", + "158156", + "158202", + "158423", + "158990", + "159370", + "159801", + "159862", + "159919", + "159957", + "160451", + "160464", + "160982", + "161162", + "161331", + "161519", + "161576", + "161866", + "162020", + "162036", + "162092", + "162306", + "162549", + "162678", + "162798", + "163001", + "163039", + "163164", + "163254", + "163444", + "163517", + "163613", + "163825", + "163860", + "164018", + "164101", + "164713", + "164795", + "164989", + "165403", + "165521", + "165722", + "165988", + "166002", + "166374", + "166659", + "166714", + "166951", + "167223", + "167462", + "167493", + "167663", + "167917", + "168095", + "168127", + "168694", + "168971", + "169649", + "169674", + "169728", + "169817", + "169838", + "170025", + "170807", + "170875", + "170998", + "171186", + "171219", + "171460", + "171626", + "171726", + "172073", + "172138", + "172222", + "172488", + "172575", + "172763", + "172830", + "172960", + "173232", + "173248", + "173732", + "174439", + "174449", + "174521", + "174666", + "175176", + "175266", + "175356", + "175504", + "175844", + "175887", + "176175", + "176211", + "176255", + "176296", + "176375", + "176444", + "176998", + "177058", + "177108", + "177336", + "177473", + "177536", + "177680", + "177701", + "178063", + "178199", + "178270", + "178278", + "178421", + "178454", + "178973", + "179168", + "179264", + "179369", + "179600", + "179943", + "180839", + "181026", + "181157", + "181763", + "181990", + "182089", + "182267", + "182568", + "182583", + "182605", + "182793", + "182840", + "183009", + "183268", + "183662", + "183829", + "183932", + "184491", + "184676", + "184770", + "184802", + "184841", + "184892", + "185054", + "185101", + "185117", + "185165", + "185298", + "185316", + "185777", + "186172", + "186197", + "186424", + "186481", + "186585", + "186719", + "186902", + "187744", + "187814", + "187894", + "188066", + "188085", + "188778", + "189232", + "189269", + "189397", + "189485", + "189490", + "189519", + "189574", + "189751", + "190146", + "190176", + "190206", + "190249", + "190250", + "190332", + "190448", + "190477", + "190569", + "191141", + "191237", + "191400", + "191635", + "192431", + "192460", + "192557", + "192778", + "192831", + "192947", + "193267", + "193325", + "193358", + "193365", + "193374", + "193387", + "193490", + "193566", + "193574", + "193637", + "193681", + "193728", + "193737", + "193811", + "193844", + "193941", + "194054", + "194063", + "194154", + "194170", + "194195", + "194240", + "194254", + "194268", + "194280", + "194303", + "194351", + "194418", + "194489", + "194561", + "194594", + "194597", + "194642", + "194676", + "194688", + "194711", + "194735", + "194800", + "194803", + "194811", + "194814", + "194828", + "194992", + "195013", + "195016", + "195035", + "195196", + "195230", + "195238", + "195296", + "195299", + "195348", + "195405", + "195408", + "195421", + "195475", + "195509", + "195526", + "195535", + "195569", + "195618", + "195638", + "195663", + "195705", + "195709", + "195714", + "195736", + "195789", + "195791", + "195803", + "195804", + "195807", + "195829", + "195831", + "195900", + "195926", + "195938", + "195943", + "195951", + "196009", + "196030", + "196046", + "196126", + "196127", + "196165", + "196221", + "196266", + "196286", + "196293", + "196342", + "196348", + "196369", + "196391", + "196448", + "196476", + "196503", + "196528", + "196529", + "196580", + "196584", + "196604", + "196613", + "196640", + "196641", + "196692", + "196705", + "196730", + "196805", + "196815", + "196850", + "196861", + "196872", + "196888", + "196925", + "196927", + "196981", + "196988", + "196990", + "197034", + "197065", + "197078", + "197087", + "197108", + "197149", + "197206", + "197251", + "197258", + "197263", + "197269", + "197282", + "197290", + "197308", + "197323", + "197348", + "197351", + "197380", + "197432", + "197467", + "197468", + "197516", + "197616", + "197632", + "197687", + "197717", + "197730", + "197781", + "197788", + "197835", + "197884", + "197910", + "197982", + "198031", + "198034", + "198126", + "198132", + "198202", + "198298", + "198314", + "198324", + "198328", + "198348", + "198442", + "198491", + "198550", + "198552", + "198577", + "198585", + "198625", + "198681", + "198690", + "198695", + "198697", + "198706", + "198712", + "198721", + "198724", + "198730", + "198732", + "198767", + "198815", + "198825", + "198907", + "198950", + "198969", + "199023", + "199034", + "199207", + "199245", + "199256", + "199271", + "199309", + "199370", + "199386", + "199396", + "199410", + "199461", + "199477", + "199486", + "199693", + "199733", + "199768", + "199796", + "199832", + "199855", + "199896", + "199910", + "199923", + "199933", + "199947", + "200017", + "200043", + "200108", + "200127", + "200152", + "200170", + "200238", + "200272", + "200309", + "200315", + "200342", + "200413", + "200443", + "200461", + "200551", + "200611", + "200639", + "200647", + "200663", + "200669", + "200692", + "200720", + "200757", + "200765", + "200768", + "200775", + "200803", + "200808", + "200889", + "200896", + "200897", + "200922", + "200983", + "200986", + "201005", + "201020", + "201045", + "201048", + "201113", + "201154", + "201187", + "201234", + "201243", + "201249", + "201284", + "201292", + "201347", + "201388", + "201410", + "201454", + "201497", + "201554", + "201559", + "201591", + "201614", + "201691", + "201754", + "201771", + "201808", + "201852", + "201856", + "201909", + "201913", + "201920", + "201941", + "201977", + "202005", + "202034", + "202120", + "202201", + "202218", + "202236", + "202253", + "202276", + "202307", + "202321", + "202324", + "202377", + "202382", + "202454", + "202490", + "202499", + "202531", + "202546", + "202567", + "202582", + "202630", + "202645", + "202702", + "202771", + "202777", + "202814", + "202873", + "202876", + "202898", + "202942", + "203001", + "203025", + "203044", + "203076", + "203174", + "203226", + "203232", + "203237", + "203240", + "203339", + "203343", + "203372", + "203392", + "203401", + "203416", + "203463", + "203486", + "203515", + "203775", + "203842", + "203844", + "203996", + "204003", + "204018", + "204032", + "204040", + "204104", + "204108", + "204179", + "204182", + "204197", + "204211", + "204212", + "204223", + "204250", + "204271", + "204398", + "204441", + "204448", + "204488", + "204489", + "204497", + "204499", + "204590", + "204628", + "204667", + "204710", + "204790", + "204797", + "204847", + "204850", + "204895", + "204999", + "205044", + "205054", + "205061", + "205093", + "205162", + "205171", + "205189", + "205193", + "205224", + "205245", + "205256", + "205317", + "205353", + "205483", + "205626", + "205646", + "205656", + "205701", + "205732", + "205754", + "205800", + "205846", + "205858", + "205859", + "205901", + "205942", + "205954", + "206023", + "206042", + "206076", + "206132", + "206233", + "206237", + "206249", + "206259", + "206272", + "206331", + "206376", + "206506", + "206545", + "206566", + "206568", + "206577", + "206592", + "206625", + "206773", + "206848", + "206919", + "206930", + "206938", + "206960", + "206963", + "206966", + "207000", + "207006", + "207014", + "207058", + "207081", + "207082", + "207129", + "207140", + "207167", + "207266", + "207283", + "207329", + "207347", + "207351", + "207481", + "207504", + "207554", + "207575", + "207701", + "207735", + "207754", + "207756", + "207757", + "207765", + "207768", + "207789", + "207814", + "207885", + "207888", + "207923", + "207933", + "207938", + "207955", + "207971", + "208023", + "208152", + "208159", + "208160", + "208171", + "208187", + "208201", + "208429", + "208441", + "208468", + "208497", + "208513", + "208532", + "208534", + "208555", + "208578", + "208592", + "208610", + "208625", + "208663", + "208680", + "208690", + "208694", + "208702", + "208723", + "208848", + "208856", + "208864", + "208885", + "208900", + "208924", + "208967", + "208968", + "209081", + "209085", + "209114", + "209174", + "209214", + "209221", + "209313", + "209367", + "209388", + "209396", + "209406", + "209415", + "209430", + "209438", + "209615", + "209653", + "209701", + "209709", + "209726", + "209737", + "209746", + "209753", + "209760", + "209765", + "209792", + "209796", + "209812", + "209823", + "209860", + "209861", + "209895", + "209901", + "209905", + "209932", + "209996", + "210064", + "210160", + "210197", + "210227", + "210229", + "210235", + "210318", + "210331", + "210341", + "210344", + "210353", + "210398", + "210399", + "210465", + "210466", + "210469", + "210473", + "210525", + "210540", + "210567", + "210581", + "210601", + "210668", + "210687", + "210762", + "210796", + "210818", + "210904", + "210930", + "210933", + "210967", + "210996", + "211023", + "211044", + "211069", + "211096", + "211101", + "211108", + "211155", + "211212", + "211268", + "211329", + "211356", + "211531", + "211537", + "211550", + "211595", + "211596", + "211629", + "211664", + "211684", + "211715", + "211752", + "211785", + "211854", + "211859", + "211880", + "211929", + "211937", + "211973", + "211974", + "212055", + "212093", + "212149", + "212153", + "212251", + "212302", + "212366", + "212523", + "212528", + "212559", + "212580", + "212628", + "212696", + "212740", + "212915", + "212956", + "212969", + "212975", + "213064", + "213065", + "213109", + "213113", + "213213", + "213254", + "213365", + "213375", + "213380", + "213385", + "213394", + "213400", + "213503", + "213514", + "213524", + "213534", + "213551", + "213601", + "213636", + "213651", + "213664", + "213737", + "213778", + "213792", + "213816", + "213854", + "213855", + "213871", + "213880", + "213884", + "213996", + "214128", + "214181", + "214188", + "214193", + "214212", + "214272", + "214310", + "214329", + "214331", + "214347", + "214420", + "214434", + "214443", + "214469", + "214481", + "214515", + "214562", + "214633", + "214669", + "214696", + "214701", + "214717", + "214745", + "214779", + "214807", + "214830", + "214921", + "214927", + "214931", + "214990", + "215005", + "215024", + "215076", + "215099", + "215116", + "215172", + "215175", + "215181", + "215196", + "215215", + "215253", + "215308", + "215323", + "215330", + "215373", + "215435", + "215440", + "215479", + "215491", + "215533", + "215583", + "215584", + "215687", + "215693", + "215706", + "215718", + "215778", + "215807", + "215838", + "215859", + "215877", + "215924", + "215935", + "215945", + "215951", + "216020", + "216026", + "216033", + "216040", + "216069", + "216081", + "216174", + "216193", + "216196", + "216207", + "216328", + "216343", + "216430", + "216444", + "216445", + "216497", + "216500", + "216511", + "216513", + "216535", + "216765", + "216967", + "217059", + "217065", + "217076", + "217147", + "217151", + "217155", + "217181", + "217326", + "217363", + "217381", + "217412", + "217475", + "217476", + "217534", + "217565", + "217568", + "217645", + "217660", + "217675", + "217740", + "217779", + "217808", + "217830", + "217858", + "217878", + "217884", + "217908", + "217914", + "217956", + "218062", + "218063", + "218134", + "218137", + "218142", + "218173", + "218178", + "218198", + "218240", + "218281", + "218294", + "218350", + "218373", + "218385", + "218400", + "218425", + "218435", + "218475", + "218502", + "218582", + "218675", + "218687", + "218717", + "218722", + "218781", + "218833", + "218841", + "218944", + "218981", + "218985", + "219032", + "219037", + "219062", + "219065", + "219085", + "219150", + "219165", + "219246", + "219263", + "219295", + "219324", + "219332", + "219381", + "219390", + "219425", + "219454", + "219458", + "219459", + "219475", + "219485", + "219561", + "219619", + "219626", + "219641", + "219665", + "219693", + "219696", + "219740", + "219754", + "219763", + "219799", + "219807", + "219880", + "219958", + "220010", + "220046", + "220081", + "220118", + "220130", + "220140", + "220198", + "220227", + "220318", + "220326", + "220349", + "220391", + "220407", + "220408", + "220419", + "220453", + "220458", + "220471", + "220473", + "220474", + "220477", + "220485", + "220518", + "220539", + "220551", + "220553", + "220572", + "220647", + "220649", + "220653", + "220669", + "220781", + "220787", + "220809", + "220880", + "220898", + "220946", + "220968", + "220984", + "220992", + "221029", + "221030", + "221074", + "221112", + "221125", + "221176", + "221184", + "221221", + "221248", + "221277", + "221305", + "221314", + "221382", + "221400", + "221412", + "221448", + "221454", + "221470", + "221485", + "221489", + "221495", + "221505", + "221562", + "221583", + "221605", + "221606", + "221721", + "221733", + "221763", + "221773", + "221792", + "221799", + "221923", + "222027", + "222127", + "222131", + "222143", + "222191", + "222222", + "222268", + "222269", + "222332", + "222447", + "222449", + "222475", + "222498", + "222520", + "222532", + "222535", + "222560", + "222681", + "222719", + "222759", + "222817", + "222819", + "222828", + "222855", + "222966", + "222979", + "223064", + "223077", + "223106", + "223163", + "223178", + "223189", + "223194", + "223218", + "223289", + "223294", + "223311", + "223318", + "223321", + "223397", + "223401", + "223416", + "223418", + "223462", + "223476", + "223510", + "223543", + "223552", + "223662", + "223673", + "223691", + "223723", + "223838", + "223885", + "223895", + "223918", + "223928", + "223930", + "223933", + "223966", + "224017", + "224022", + "224116", + "224119", + "224172", + "224259", + "224302", + "224328", + "224379", + "224390", + "224409", + "224440", + "224443", + "224457", + "224483", + "224485", + "224496", + "224499", + "224525", + "224537", + "224538", + "224543", + "224549", + "224566", + "224596", + "224614", + "224701", + "224714", + "224754", + "224776", + "224781", + "224830", + "224891", + "22501", + "225044", + "22506", + "225063", + "22507", + "225082", + "225138", + "225162", + "225192", + "225232", + "22524", + "225253", + "225266", + "22527", + "225274", + "22530", + "225303", + "225311", + "225319", + "225327", + "225346", + "22535", + "22537", + "22541", + "225413", + "225428", + "22543", + "225442", + "225473", + "225497", + "225550", + "22556", + "225576", + "22558", + "225618", + "22564", + "22565", + "225688", + "225706", + "22572", + "22574", + "22575", + "225762", + "225766", + "22578", + "22580", + "225846", + "22585", + "225871", + "225907", + "22594", + "225968", + "225989", + "225990", + "22600", + "226008", + "22601", + "22603", + "226059", + "22606", + "226096", + "22611", + "226117", + "226202", + "226230", + "226302", + "22633", + "226336", + "22634", + "226398", + "22641", + "22642", + "226429", + "226448", + "226481", + "226488", + "226491", + "226511", + "226533", + "226566", + "22658", + "226583", + "226586", + "226598", + "226613", + "226648", + "22665", + "226668", + "226702", + "226704", + "226709", + "226767", + "226778", + "226785", + "226849", + "22685", + "22686", + "226883", + "226884", + "226892", + "226915", + "226931", + "226940", + "226958", + "22698", + "226984", + "226993", + "227008", + "22704", + "227086", + "227160", + "227162", + "227163", + "227169", + "227173", + "227182", + "227193", + "22720", + "22721", + "227211", + "227223", + "22723", + "227231", + "227245", + "227275", + "227292", + "227297", + "227314", + "227344", + "227347", + "22740", + "227410", + "227472", + "22748", + "227481", + "22750", + "22753", + "227544", + "227549", + "22756", + "22758", + "227599", + "227616", + "22762", + "227621", + "227627", + "227667", + "227670", + "227681", + "22769", + "227691", + "227697", + "22771", + "227726", + "227753", + "227779", + "22779", + "227799", + "227837", + "227848", + "227914", + "227927", + "22795", + "227967", + "227969", + "227980", + "227986", + "227991", + "228011", + "228025", + "22803", + "228035", + "228043", + "22809", + "22810", + "22814", + "22815", + "228158", + "22816", + "228166", + "228169", + "228181", + "22819", + "22821", + "228212", + "22823", + "228238", + "228253", + "22827", + "228280", + "228285", + "228305", + "228351", + "22836", + "228378", + "228392", + "22842", + "228458", + "228482", + "228496", + "22854", + "228592", + "228614", + "228616", + "22868", + "228691", + "22871", + "22873", + "228771", + "228800", + "22884", + "22885", + "22891", + "228938", + "228939", + "22895", + "22896", + "228961", + "228988", + "228999", + "229024", + "229032", + "22908", + "229083", + "22918", + "229189", + "22919", + "229197", + "22920", + "229209", + "22923", + "229232", + "229235", + "229321", + "229328", + "229364", + "229378", + "229398", + "22940", + "22944", + "229440", + "229456", + "22947", + "229524", + "22953", + "22954", + "22955", + "22956", + "22957", + "22958", + "229603", + "22961", + "229613", + "229656", + "22967", + "229705", + "22971", + "229809", + "229814", + "229859", + "22986", + "229902", + "22991", + "229918", + "22993", + "229943", + "22998", + "229984", + "229994", + "23000", + "230003", + "230009", + "23001", + "230024", + "230034", + "23009", + "23010", + "230109", + "230114", + "230115", + "230118", + "23014", + "230145", + "230147", + "23016", + "230243", + "230257", + "230258", + "230276", + "230281", + "23029", + "23030", + "230305", + "230360", + "23039", + "230394", + "230403", + "230406", + "230486", + "23049", + "23051", + "230519", + "23054", + "230569", + "23058", + "23059", + "230604", + "230620", + "230644", + "23066", + "23071", + "230711", + "230729", + "230754", + "230765", + "230776", + "23080", + "230803", + "23082", + "230822", + "230825", + "23086", + "230913", + "230915", + "230917", + "23092", + "230927", + "230965", + "23098", + "23100", + "231015", + "231038", + "231065", + "23107", + "23108", + "231098", + "231100", + "231171", + "23120", + "231224", + "231236", + "23126", + "231277", + "23130", + "231312", + "231340", + "231382", + "231389", + "23145", + "23153", + "231589", + "23162", + "231633", + "23166", + "23167", + "231710", + "231722", + "23173", + "231732", + "23175", + "23179", + "231838", + "231857", + "231883", + "231902", + "231904", + "23192", + "231935", + "23200", + "23202", + "23204", + "232073", + "232080", + "232095", + "23215", + "232181", + "232190", + "23221", + "232213", + "232235", + "232263", + "232338", + "23234", + "23239", + "232407", + "232434", + "232445", + "23246", + "232480", + "232488", + "232523", + "23256", + "23259", + "232594", + "23260", + "23263", + "232630", + "23264", + "23266", + "232693", + "232698", + "232700", + "232702", + "23272", + "232738", + "232764", + "23278", + "232787", + "23281", + "23284", + "23285", + "23287", + "232875", + "232878", + "23288", + "232885", + "23294", + "232948", + "232970", + "232972", + "232976", + "232998", + "233008", + "233009", + "233015", + "233034", + "233037", + "23308", + "23309", + "23310", + "233119", + "23312", + "233141", + "233208", + "23321", + "23322", + "23324", + "233246", + "233267", + "233282", + "233299", + "23332", + "233326", + "233330", + "23340", + "23353", + "23357", + "23359", + "23372", + "23374", + "23375", + "23383", + "23388", + "23395", + "23402", + "23404", + "23406", + "23409", + "23413", + "23420", + "23434", + "23441", + "23443", + "23453", + "23454", + "23462", + "23463", + "23464", + "23467", + "23475", + "23480", + "23485", + "23489", + "23490", + "23502", + "23504", + "23509", + "23510", + "23514", + "23516", + "23541", + "23542", + "23548", + "23549", + "23551", + "23555", + "23559", + "23578", + "23579", + "23583", + "23585", + "23589", + "23591", + "23612", + "23616", + "23621", + "23627", + "23637", + "23652", + "23654", + "23656", + "23657", + "23668", + "23681", + "23686", + "23692", + "23696", + "23697", + "23701", + "23702", + "23709", + "23739", + "23744", + "23753", + "23756", + "23764", + "23766", + "23774", + "23776", + "23784", + "23785", + "23794", + "23796", + "23799", + "23803", + "23823", + "23824", + "23825", + "23827", + "23835", + "23846", + "23855", + "23859", + "23868", + "23871", + "23876", + "23890", + "23891", + "23893", + "23895", + "23896", + "23897", + "23901", + "23906", + "23921", + "23928", + "23933", + "23945", + "23950", + "23953", + "23955", + "23960", + "23967", + "23973", + "23980", + "23981", + "23984", + "23988", + "23993", + "23995", + "23999", + "24005", + "24019", + "24022", + "24024", + "24029", + "24032", + "24033", + "24036", + "24037", + "24039", + "24043", + "24047", + "24056", + "24059", + "24060", + "24061", + "24072", + "24079", + "24085", + "24090", + "24101", + "24106", + "24112", + "24113", + "24118", + "24119", + "24123", + "24130", + "24131", + "24134", + "24136", + "24138", + "24142", + "24164", + "24168", + "24171", + "24176", + "24181", + "24184", + "24192", + "24197", + "24198", + "24200", + "24219", + "24223", + "24227", + "24230", + "24241", + "24246", + "24250", + "24251", + "24255", + "24263", + "24264", + "24269", + "24273", + "24275", + "24278", + "24284", + "24297", + "24303", + "24305", + "24309", + "24315", + "24323", + "24326", + "24333", + "24337", + "24338", + "24339", + "24341", + "24344", + "24353", + "24361", + "24373", + "24383", + "24390", + "24393", + "24396", + "24400", + "24404", + "24405", + "24410", + "24412", + "24433", + "24436", + "24438", + "24441", + "24446", + "24452", + "24453", + "24464", + "24466", + "24469", + "24487", + "24493", + "24500", + "24508", + "24513", + "24516", + "24517", + "24524", + "24527", + "24531", + "24541", + "24549", + "24557", + "24567", + "24578", + "24579", + "24580", + "24585", + "24588", + "24590", + "24599", + "24600", + "24616", + "24627", + "24630", + "24632", + "24633", + "24637", + "24639", + "24645", + "24649", + "24651", + "24655", + "24657", + "24668", + "24670", + "24676", + "24684", + "24688", + "24689", + "24692", + "24702", + "24704", + "24711", + "24716", + "24717", + "24733", + "24736", + "24739", + "24743", + "24769", + "24774", + "24777", + "24779", + "24782", + "24789", + "24798", + "24799", + "24801", + "24808", + "24822", + "24824", + "24832", + "24836", + "24849", + "24855", + "24863", + "24872", + "24879", + "24881", + "24884", + "24885", + "24886", + "24887", + "24888", + "24894", + "24895", + "24898", + "24902", + "24908", + "24917", + "24925", + "24928", + "24932", + "24940", + "24945", + "24956", + "24959", + "24962", + "24963", + "24968", + "24969", + "24983", + "24985", + "24986", + "24991", + "24995", + "24999", + "25001", + "25007", + "25009", + "25011", + "25012", + "25015", + "25018", + "25020", + "25021", + "25025", + "25031", + "25045", + "25049", + "25054", + "25058", + "25071", + "25081", + "25082", + "25087", + "25091", + "25105", + "25108", + "25112", + "25113", + "25117", + "25119", + "25124", + "25125", + "25129", + "25143", + "25145", + "25160", + "25168", + "25176", + "25186", + "25187", + "25193", + "25194", + "25196", + "25199", + "25207", + "25211", + "25215", + "25217", + "25218", + "25227", + "25245", + "25254", + "25270", + "25284", + "25288", + "25296", + "25299", + "25305", + "25333", + "25337", + "25338", + "25347", + "25349", + "25350", + "25353", + "25355", + "25358", + "25370", + "25393", + "25403", + "25412", + "25413", + "25414", + "25417", + "25422", + "25423", + "25425", + "25428", + "25434", + "25437", + "25449", + "25450", + "25451", + "25452", + "25471", + "25473", + "25474", + "25480", + "25485", + "25486", + "25495", + "25508", + "25509", + "25512", + "25514", + "25518", + "25520", + "25523", + "25524", + "25527", + "25530", + "25531", + "25539", + "25542", + "25544", + "25545", + "25554", + "25561", + "25565", + "25566", + "25577", + "25579", + "25582", + "25587", + "25597", + "25598", + "25601", + "25611", + "25619", + "25622", + "25632", + "25635", + "25637", + "25639", + "25643", + "25647", + "25654", + "25661", + "25665", + "25672", + "25674", + "25677", + "25679", + "25682", + "25686", + "25688", + "25693", + "25696", + "25699", + "25700", + "25704", + "25706", + "25711", + "25712", + "25718", + "25722", + "25726", + "25728", + "25734", + "25740", + "25743", + "25745", + "25747", + "25750", + "25780", + "25785", + "25787", + "25798", + "25799", + "25816", + "25819", + "25823", + "25825", + "25830", + "25834", + "25841", + "25848", + "25853", + "25854", + "25861", + "25863", + "25866", + "25868", + "25869", + "25874", + "25879", + "25899", + "25904", + "25905", + "25913", + "25941", + "25944", + "25945", + "25948", + "25950", + "25953", + "25959", + "25971", + "25973", + "25974", + "25980", + "25983", + "25990", + "25992", + "25994", + "25998", + "25999", + "26004", + "26015", + "26016", + "26017", + "26020", + "26021", + "26024", + "26032", + "26033", + "26039", + "26043", + "26047", + "26053", + "26062", + "26070", + "26074", + "26084", + "26089", + "26093", + "26094", + "26107", + "26108", + "26120", + "26136", + "26144", + "26155", + "26157", + "26159", + "26162", + "26168", + "26170", + "26173", + "26180", + "26184", + "26190", + "26191", + "26197", + "26203", + "26216", + "26220", + "26233", + "26235", + "26243", + "26244", + "26245", + "26253", + "26256", + "26277", + "26281", + "26284", + "26286", + "26289", + "26291", + "26299", + "26316", + "26325", + "26327", + "26347", + "26348", + "26351", + "26352", + "26354", + "26358", + "26359", + "26360", + "26365", + "26371", + "26375", + "26388", + "26399", + "26410", + "26412", + "26414", + "26426", + "26437", + "26438", + "26439", + "26452", + "26477", + "26481", + "26485", + "26486", + "26489", + "26517", + "26526", + "26530", + "26539", + "26541", + "26546", + "26558", + "26560", + "26571", + "26576", + "26577", + "26578", + "26579", + "26581", + "26603", + "26615", + "26620", + "26625", + "26631", + "26643", + "26644", + "26645", + "26658", + "26661", + "26666", + "26670", + "26671", + "26683", + "26685", + "26686", + "26692", + "26696", + "26699", + "26700", + "26707", + "26711", + "26718", + "26735", + "26736", + "26745", + "26748", + "26753", + "26760", + "26762", + "26764", + "26766", + "26768", + "26773", + "26780", + "26785", + "26790", + "26800", + "26808", + "26811", + "26817", + "26818", + "26819", + "26821", + "26833", + "26858", + "26861", + "26872", + "26874", + "26875", + "26878", + "26884", + "26892", + "26895", + "26897", + "26912", + "26918", + "26926", + "26929", + "26937", + "26944", + "26954", + "26958", + "26964", + "26966", + "26968", + "26969", + "26976", + "26980", + "26981", + "26991", + "26992", + "27024", + "27027", + "27028", + "27031", + "27033", + "27042", + "27043", + "27046", + "27050", + "27065", + "27067", + "27078", + "27084", + "27093", + "27121", + "27130", + "27138", + "27144", + "27145", + "27163", + "27172", + "27176", + "27192", + "27193", + "27197", + "27198", + "27200", + "27204", + "27206", + "27223", + "27224", + "27234", + "27236", + "27239", + "27247", + "27249", + "27254", + "27261", + "27268", + "27270", + "27276", + "27277", + "27282", + "27283", + "27284", + "27295", + "27296", + "27301", + "27305", + "27307", + "27313", + "27316", + "27321", + "27323", + "27326", + "27332", + "27346", + "27355", + "27358", + "27361", + "27365", + "27368", + "27369", + "27370", + "27374", + "27382", + "27387", + "27391", + "27395", + "27407", + "27409", + "27421", + "27430", + "27432", + "27436", + "27437", + "27443", + "27444", + "27450", + "27452", + "27458", + "27467", + "27468", + "27473", + "27474", + "27485", + "27487", + "27492", + "27496", + "27497", + "27499", + "27502", + "27508", + "27509", + "27512", + "27519", + "27525", + "27527", + "27529", + "27543", + "27549", + "27553", + "27559", + "27560", + "27570", + "27576", + "27577", + "27579", + "27581", + "27584", + "27592", + "27594", + "27601", + "27604", + "27607", + "27608", + "27611", + "27612", + "27619", + "27624", + "27626", + "27642", + "27648", + "27658", + "27660", + "27671", + "27682", + "27687", + "27688", + "27703", + "27705", + "27714", + "27716", + "27721", + "27722", + "27732", + "27734", + "27740", + "27743", + "27747", + "27749", + "27750", + "27757", + "27760", + "27766", + "27773", + "27780", + "27783", + "27789", + "27798", + "27800", + "27815", + "27817", + "27832", + "27833", + "27836", + "27850", + "27852", + "27858", + "27869", + "27876", + "27877", + "27879", + "27880", + "27881", + "27883", + "27888", + "27893", + "27920", + "27931", + "27935", + "27936", + "27938", + "27940", + "27941", + "27943", + "27947", + "27949", + "27956", + "27962", + "27970", + "27986", + "28006", + "28007", + "28008", + "28013", + "28026", + "28027", + "28028", + "28031", + "28038", + "28039", + "28045", + "28047", + "28050", + "28052", + "28061", + "28069", + "28070", + "28072", + "28073", + "28081", + "28082", + "28090", + "28100", + "28106", + "28109", + "28110", + "28112", + "28116", + "28119", + "28121", + "28122", + "28134", + "28141", + "28150", + "28153", + "28155", + "28158", + "28159", + "28160", + "28162", + "28163", + "28169", + "28177", + "28181", + "28182", + "28183", + "28190", + "28191", + "28197", + "28205", + "28207", + "28208", + "28209", + "28212", + "28218", + "28223", + "28226", + "28228", + "28229", + "28232", + "28241", + "28242", + "28244", + "28249", + "28252", + "28261", + "28262", + "28263", + "28272", + "28273", + "28278", + "28285", + "28294", + "28296", + "28299", + "28311", + "28319", + "28320", + "28323", + "28332", + "28338", + "28346", + "28350", + "28360", + "28372", + "28376", + "28378", + "28382", + "28383", + "28390", + "28392", + "28395", + "28396", + "28411", + "28416", + "28423", + "28441", + "28452", + "28453", + "28463", + "28467", + "28471", + "28473", + "28476", + "28479", + "28483", + "28489", + "28498", + "28499", + "28501", + "28503", + "28504", + "28512", + "28515", + "28517", + "28519", + "28526", + "28538", + "28540", + "28541", + "28542", + "28546", + "28548", + "28553", + "28557", + "28558", + "28560", + "28583", + "28584", + "28591", + "28595", + "28598", + "28600", + "28601", + "28607", + "28609", + "28611", + "28612", + "28616", + "28621", + "28622", + "28631", + "28645", + "28647", + "28660", + "28661", + "28662", + "28665", + "28675", + "28682", + "28685", + "28691", + "28697", + "28699", + "28700", + "28708", + "28719", + "28724", + "28725", + "28727", + "28728", + "28740", + "28741", + "28744", + "28747", + "28749", + "28760", + "28763", + "28764", + "28777", + "28778", + "28782", + "28788", + "28793", + "28794", + "28797", + "28798", + "28803", + "28827", + "28831", + "28833", + "28842", + "28844", + "28846", + "28847", + "28863", + "28867", + "28885", + "28888", + "28895", + "28898", + "28902", + "28912", + "28914", + "28919", + "28923", + "28925", + "28927", + "28939", + "28940", + "28945", + "28949", + "28951", + "28954", + "28956", + "28958", + "28960", + "28972", + "28973", + "28981", + "28982", + "28992", + "29010", + "29022", + "29034", + "29036", + "29040", + "29059", + "29060", + "29072", + "29074", + "29075", + "29077", + "29086", + "29094", + "29095", + "29104", + "29106", + "29107", + "29111", + "29121", + "29124", + "29130", + "29132", + "29147", + "29184", + "29190", + "29215", + "29222", + "29223", + "29242", + "29249", + "29258", + "29260", + "29263", + "29266", + "29281", + "29285", + "29291", + "29304", + "29309", + "29310", + "29315", + "29318", + "29321", + "29326", + "29340", + "29345", + "29347", + "29360", + "29361", + "29366", + "29371", + "29377", + "29394", + "29399", + "29404", + "29406", + "29411", + "29443", + "29447", + "29453", + "29462", + "29468", + "29479", + "29495", + "29499", + "29505", + "29507", + "29509", + "29515", + "29519", + "29524", + "29530", + "29544", + "29546", + "29547", + "29555", + "29563", + "29566", + "29573", + "29575", + "29576", + "29578", + "29590", + "29591", + "29607", + "29634", + "29635", + "29644", + "29645", + "29650", + "29652", + "29658", + "29662", + "29663", + "29676", + "29679", + "29680", + "29684", + "29692", + "29696", + "29699", + "29704", + "29705", + "29707", + "29719", + "29723", + "29725", + "29726", + "29729", + "29735", + "29742", + "29750", + "29762", + "29769", + "29772", + "29774", + "29780", + "29781", + "29792", + "29801", + "29806", + "29811", + "29816", + "29817", + "29821", + "29832", + "29834", + "29836", + "29838", + "29841", + "29843", + "29846", + "29847", + "29853", + "29858", + "29861", + "29868", + "29870", + "29871", + "29883", + "29894", + "29896", + "29898", + "29905", + "29908", + "29911", + "29914", + "29918", + "29927", + "29931", + "29933", + "29941", + "29949", + "29955", + "29961", + "29964", + "29966", + "29967", + "29976", + "29980", + "29983", + "29984", + "29994", + "29997", + "30002", + "30010", + "30021", + "30027", + "30028", + "30029", + "30034", + "30038", + "30047", + "30048", + "30049", + "30050", + "30051", + "30061", + "30064", + "30071", + "30074", + "30075", + "30077", + "30082", + "30087", + "30093", + "30100", + "30101", + "30102", + "30109", + "30117", + "30124", + "30131", + "30134", + "30143", + "30145", + "30154", + "30155", + "30173", + "30177", + "30197", + "30201", + "30203", + "30210", + "30214", + "30216", + "30221", + "30223", + "30231", + "30239", + "30240", + "30242", + "30245", + "30247", + "30254", + "30260", + "30271", + "30272", + "30284", + "30289", + "30296", + "30307", + "30310", + "30312", + "30313", + "30319", + "30328", + "30331", + "30340", + "30345", + "30346", + "30348", + "30356", + "30360", + "30365", + "30375", + "30382", + "30402", + "30403", + "30405", + "30410", + "30414", + "30436", + "30440", + "30441", + "30444", + "30454", + "30457", + "30473", + "30474", + "30476", + "30485", + "30496", + "30501", + "30506", + "30507", + "30513", + "30521", + "30522", + "30524", + "30529", + "30531", + "30534", + "30541", + "30548", + "30551", + "30555", + "30556", + "30560", + "30563", + "30565", + "30567", + "30586", + "30588", + "30590", + "30599", + "30604", + "30614", + "30650", + "30653", + "30656", + "30663", + "30666", + "30667", + "30669", + "30678", + "30689", + "30700", + "30704", + "30711", + "30727", + "30728", + "30729", + "30731", + "30745", + "30746", + "30748", + "30750", + "30759", + "30760", + "30766", + "30771", + "30781", + "30782", + "30794", + "30797", + "30805", + "30813", + "30818", + "30821", + "30848", + "30849", + "30854", + "30868", + "30869", + "30873", + "30874", + "30879", + "30893", + "30896", + "30902", + "30908", + "30911", + "30913", + "30917", + "30918", + "30931", + "30943", + "30949", + "30954", + "30959", + "30964", + "30974", + "30977", + "30981", + "30985", + "30996", + "30997", + "31003", + "31020", + "31025", + "31032", + "31061", + "31064", + "31065", + "31076", + "31082", + "31091", + "31104", + "31105", + "31115", + "31121", + "31123", + "31132", + "31134", + "31138", + "31145", + "31149", + "31154", + "31156", + "31166", + "31167", + "31168", + "31169", + "31170", + "31177", + "31182", + "31183", + "31188", + "31196", + "31198", + "31199", + "31210", + "31227", + "31230", + "31234", + "31244", + "31245", + "31251", + "31252", + "31258", + "31267", + "31275", + "31280", + "31281", + "31282", + "31292", + "31306", + "31307", + "31308", + "31311", + "31312", + "31313", + "31320", + "31330", + "31350", + "31358", + "31359", + "31363", + "31365", + "31381", + "31393", + "31395", + "31396", + "31405", + "31408", + "31414", + "31416", + "31425", + "31426", + "31429", + "31434", + "31437", + "31440", + "31443", + "31448", + "31460", + "31463", + "31469", + "31478", + "31482", + "31485", + "31490", + "31503", + "31509", + "31521", + "31527", + "31538", + "31541", + "31543", + "31546", + "31552", + "31554", + "31563", + "31564", + "31573", + "31579", + "31589", + "31601", + "31602", + "31614", + "31619", + "31623", + "31636", + "31648", + "31654", + "31659", + "31678", + "31688", + "31689", + "31693", + "31711", + "31717", + "31721", + "31725", + "31727", + "31729", + "31731", + "31733", + "31737", + "31740", + "31742", + "31745", + "31748", + "31764", + "31769", + "31772", + "31777", + "31779", + "31785", + "31796", + "31801", + "31810", + "31813", + "31818", + "31819", + "31821", + "31823", + "31824", + "31825", + "31826", + "31828", + "31830", + "31837", + "31845", + "31847", + "31850", + "31851", + "31855", + "31856", + "31857", + "31866", + "31883", + "31889", + "31892", + "31903", + "31907", + "31909", + "31915", + "31919", + "31922", + "31924", + "31927", + "31928", + "31944", + "31945", + "31958", + "31960", + "31963", + "31964", + "31966", + "31971", + "31973", + "31980", + "31986", + "31991", + "31992", + "31994", + "31997", + "32011", + "32016", + "32020", + "32027", + "32029", + "32031", + "32034", + "32039", + "32057", + "32065", + "32073", + "32074", + "32080", + "32082", + "32083", + "32089", + "32091", + "32097", + "32099", + "32100", + "32101", + "32107", + "32109", + "32115", + "32128", + "32141", + "32148", + "32156", + "32177", + "32178", + "32184", + "32187", + "32194", + "32195", + "32196", + "32197", + "32201", + "32212", + "32213", + "32225", + "32231", + "32237", + "32241", + "32247", + "32249", + "32250", + "32265", + "32268", + "32270", + "32276", + "32277", + "32280", + "32281", + "32285", + "32287", + "32288", + "32293", + "32296", + "32305", + "32307", + "32314", + "32326", + "32331", + "32332", + "32342", + "32347", + "32350", + "32362", + "32368", + "32370", + "32376", + "32377", + "32382", + "32385", + "32387", + "32395", + "32412", + "32415", + "32421", + "32430", + "32431", + "32434", + "32435", + "32437", + "32439", + "32452", + "32460", + "32465", + "32467", + "32471", + "32473", + "32474", + "32485", + "32492", + "32495", + "32499", + "32509", + "32515", + "32519", + "32525", + "32527", + "32538", + "32545", + "32551", + "32564", + "32567", + "32568", + "32578", + "32590", + "32601", + "32603", + "32604", + "32607", + "32609", + "32610", + "32613", + "32615", + "32630", + "32631", + "32634", + "32645", + "32646", + "32659", + "32661", + "32665", + "32673", + "32675", + "32678", + "32682", + "32701", + "32702", + "32704", + "32705", + "32709", + "32717", + "32732", + "32742", + "32756", + "32759", + "32763", + "32771", + "32773", + "32774", + "32777", + "32779", + "32781", + "32783", + "32787", + "32791", + "32796", + "32805", + "32808", + "32815", + "32821", + "32826", + "32833", + "32836", + "32847", + "32852", + "32854", + "32858", + "32867", + "32872", + "32884", + "32886", + "32903", + "32907", + "32914", + "32921", + "32922", + "32934", + "32936", + "32941", + "32945", + "32948", + "32963", + "32964", + "32968", + "32976", + "32980", + "32983", + "32984", + "33007", + "33010", + "33025", + "33027", + "33032", + "33035", + "33037", + "33049", + "33050", + "33053", + "33054", + "33057", + "33066", + "33067", + "33073", + "33077", + "33079", + "33085", + "33086", + "33087", + "33091", + "33095", + "33097", + "33104", + "33112", + "33114", + "33121", + "33122", + "33123", + "33133", + "33138", + "33139", + "33140", + "33141", + "33143", + "33158", + "33161", + "33174", + "33175", + "33176", + "33184", + "33189", + "33191", + "33198", + "33201", + "33207", + "33213", + "33217", + "33218", + "33219", + "33227", + "33231", + "33234", + "33237", + "33238", + "33239", + "33252", + "33256", + "33257", + "33273", + "33279", + "33283", + "33286", + "33287", + "33288", + "33292", + "33295", + "33300", + "33302", + "33303", + "33305", + "33311", + "33318", + "33320", + "33323", + "33325", + "33330", + "33335", + "33337", + "33350", + "33358", + "33363", + "33375", + "33377", + "33383", + "33385", + "33391", + "33394", + "33397", + "33419", + "33437", + "33445", + "33458", + "33460", + "33464", + "33465", + "33470", + "33473", + "33491", + "33494", + "33496", + "33497", + "33499", + "33508", + "33509", + "33517", + "33520", + "33526", + "33530", + "33531", + "33532", + "33536", + "33544", + "33551", + "33552", + "33563", + "33564", + "33566", + "33567", + "33575", + "33584", + "33589", + "33590", + "33598", + "33609", + "33615", + "33616", + "33633", + "33635", + "33638", + "33639", + "33641", + "33645", + "33647", + "33656", + "33661", + "33669", + "33677", + "33685", + "33692", + "33703", + "33706", + "33721", + "33722", + "33726", + "33729", + "33735", + "33742", + "33748", + "33749", + "33760", + "33770", + "33801", + "33802", + "33811", + "33814", + "33816", + "33819", + "33822", + "33829", + "33832", + "33840", + "33851", + "33868", + "33871", + "33874", + "33882", + "33886", + "33888", + "33892", + "33903", + "33909", + "33912", + "33916", + "33918", + "33919", + "33922", + "33926", + "33927", + "33935", + "33940", + "33944", + "33946", + "33951", + "33962", + "33965", + "33968", + "33971", + "33981", + "33989", + "33993", + "34011", + "34021", + "34034", + "34048", + "34053", + "34057", + "34067", + "34068", + "34070", + "34079", + "34082", + "34088", + "34110", + "34111", + "34113", + "34120", + "34124", + "34140", + "34155", + "34159", + "34164", + "34178", + "34180", + "34193", + "34200", + "34202", + "34214", + "34215", + "34223", + "34232", + "34234", + "34241", + "34244", + "34248", + "34252", + "34254", + "34266", + "34270", + "34271", + "34278", + "34279", + "34280", + "34284", + "34305", + "34306", + "34310", + "34311", + "34326", + "34361", + "34362", + "34363", + "34367", + "34368", + "34369", + "34383", + "34385", + "34394", + "34397", + "34401", + "34402", + "34403", + "34404", + "34428", + "34440", + "34445", + "34450", + "34456", + "34459", + "34460", + "34461", + "34467", + "34481", + "34482", + "34485", + "34486", + "34496", + "34497", + "34500", + "34501", + "34504", + "34506", + "34507", + "34514", + "34520", + "34533", + "34541", + "34548", + "34551", + "34552", + "34559", + "34560", + "34569", + "34573", + "34589", + "34595", + "34599", + "34606", + "34611", + "34614", + "34620", + "34628", + "34630", + "34631", + "34633", + "34641", + "34650", + "34656", + "34659", + "34679", + "34684", + "34687", + "34688", + "34698", + "34706", + "34708", + "34721", + "34723", + "34728", + "34730", + "34731", + "34739", + "34749", + "34754", + "34758", + "34761", + "34764", + "34774", + "34775", + "34783", + "34794", + "34796", + "34806", + "34809", + "34820", + "34821", + "34825", + "34842", + "34850", + "34860", + "34873", + "34876", + "34879", + "34880", + "34881", + "34892", + "34893", + "34894", + "34895", + "34912", + "34913", + "34916", + "34918", + "34925", + "34931", + "34932", + "34933", + "34937", + "34940", + "34947", + "34948", + "34951", + "34957", + "34958", + "34960", + "34967", + "34969", + "34970", + "34989", + "34995", + "34997", + "35002", + "35005", + "35022", + "35023", + "35044", + "35045", + "35046", + "35051", + "35061", + "35086", + "35089", + "35092", + "35095", + "35106", + "35113", + "35128", + "35132", + "35142", + "35146", + "35147", + "35159", + "35161", + "35167", + "35174", + "35184", + "35192", + "35196", + "35224", + "35227", + "35237", + "35241", + "35242", + "35256", + "35264", + "35270", + "35274", + "35279", + "35282", + "35296", + "35297", + "35302", + "35306", + "35308", + "35312", + "35313", + "35317", + "35318", + "35326", + "35334", + "35341", + "35352", + "35353", + "35355", + "35356", + "35360", + "35362", + "35375", + "35379", + "35382", + "35385", + "35400", + "35408", + "35415", + "35428", + "35431", + "35432", + "35451", + "35454", + "35455", + "35458", + "35466", + "35467", + "35479", + "35481", + "35484", + "35487", + "35490", + "35492", + "35499", + "35501", + "35510", + "35514", + "35522", + "35526", + "35529", + "35530", + "35536", + "35540", + "35542", + "35549", + "35555", + "35559", + "35561", + "35563", + "35564", + "35565", + "35566", + "35575", + "35577", + "35580", + "35585", + "35587", + "35589", + "35591", + "35595", + "35610", + "35617", + "35622", + "35636", + "35640", + "35650", + "35653", + "35658", + "35660", + "35661", + "35669", + "35673", + "35674", + "35676", + "35682", + "35683", + "35686", + "35687", + "35689", + "35691", + "35692", + "35693", + "35697", + "35701", + "35705", + "35711", + "35713", + "35728", + "35735", + "35738", + "35739", + "35746", + "35750", + "35754", + "35757", + "35780", + "35784", + "35813", + "35822", + "35827", + "35828", + "35829", + "35831", + "35833", + "35841", + "35853", + "35854", + "35861", + "35862", + "35864", + "35866", + "35869", + "35871", + "35883", + "35888", + "35890", + "35892", + "35894", + "35895", + "35897", + "35898", + "35899", + "35903", + "35908", + "35910", + "35915", + "35922", + "35939", + "35950", + "35965", + "35968", + "35990", + "35992", + "35993", + "36018", + "36021", + "36035", + "36036", + "36043", + "36046", + "36050", + "36051", + "36056", + "36088", + "36090", + "36096", + "36101", + "36104", + "36119", + "36125", + "36127", + "36136", + "36145", + "36148", + "36150", + "36155", + "36169", + "36184", + "36195", + "36198", + "36203", + "36204", + "36214", + "36219", + "36224", + "36226", + "36258", + "36260", + "36265", + "36267", + "36270", + "36274", + "36279", + "36282", + "36286", + "36289", + "36303", + "36304", + "36312", + "36321", + "36323", + "36326", + "36329", + "36335", + "36352", + "36353", + "36362", + "36367", + "36382", + "36400", + "36405", + "36410", + "36415", + "36424", + "36425", + "36427", + "36446", + "36449", + "36453", + "36456", + "36457", + "36458", + "36468", + "36472", + "36473", + "36476", + "36486", + "36490", + "36498", + "36500", + "36505", + "36507", + "36511", + "36522", + "36529", + "36532", + "36533", + "36562", + "36564", + "36566", + "36573", + "36574", + "36575", + "36586", + "36588", + "36598", + "36605", + "36607", + "36610", + "36612", + "36613", + "36614", + "36616", + "36619", + "36625", + "36629", + "36660", + "36661", + "36669", + "36670", + "36676", + "36679", + "36695", + "36698", + "36699", + "36702", + "36710", + "36712", + "36718", + "36719", + "36728", + "36729", + "36747", + "36750", + "36753", + "36754", + "36755", + "36770", + "36773", + "36776", + "36780", + "36785", + "36788", + "36791", + "36797", + "36803", + "36812", + "36818", + "36833", + "36849", + "36862", + "36865", + "36866", + "36870", + "36888", + "36899", + "36900", + "36901", + "36905", + "36907", + "36912", + "36924", + "36931", + "36942", + "36948", + "36956", + "36958", + "36971", + "36984", + "36986", + "36994", + "36995", + "36997", + "36998", + "37005", + "37007", + "37010", + "37015", + "37017", + "37018", + "37028", + "37035", + "37046", + "37054", + "37055", + "37056", + "37067", + "37071", + "37077", + "37087", + "37090", + "37092", + "37096", + "37102", + "37107", + "37113", + "37120", + "37140", + "37144", + "37145", + "37172", + "37182", + "37187", + "37188", + "37194", + "37199", + "37200", + "37207", + "37225", + "37241", + "37242", + "37249", + "37258", + "37259", + "37265", + "37267", + "37272", + "37277", + "37279", + "37280", + "37293", + "37304", + "37310", + "37313", + "37315", + "37319", + "37322", + "37323", + "37327", + "37333", + "37335", + "37339", + "37341", + "37344", + "37349", + "37351", + "37355", + "37361", + "37363", + "37385", + "37406", + "37411", + "37414", + "37417", + "37423", + "37427", + "37428", + "37435", + "37436", + "37439", + "37440", + "37441", + "37442", + "37453", + "37457", + "37471", + "37475", + "37476", + "37477", + "37497", + "37507", + "37517", + "37519", + "37524", + "37527", + "37530", + "37533", + "37534", + "37539", + "37540", + "37541", + "37545", + "37546", + "37550", + "37568", + "37570", + "37571", + "37575", + "37581", + "37585", + "37588", + "37610", + "37614", + "37615", + "37619", + "37626", + "37635", + "37636", + "37637", + "37638", + "37664", + "37666", + "37683", + "37686", + "37688", + "37698", + "37705", + "37711", + "37713", + "37716", + "37718", + "37721", + "37722", + "37737", + "37748", + "37750", + "37753", + "37759", + "37761", + "37762", + "37766", + "37767", + "37775", + "37782", + "37784", + "37786", + "37792", + "37795", + "37800", + "37804", + "37817", + "37820", + "37828", + "37837", + "37847", + "37853", + "37858", + "37859", + "37865", + "37876", + "37879", + "37883", + "37884", + "37887", + "37888", + "37894", + "37896", + "37900", + "37912", + "37917", + "37925", + "37926", + "37933", + "37935", + "37946", + "37959", + "37967", + "37980", + "37981", + "37983", + "37987", + "37997", + "38007", + "38009", + "38015", + "38027", + "38038", + "38042", + "38076", + "38084", + "38088", + "38093", + "38105", + "38107", + "38119", + "38124", + "38128", + "38129", + "38138", + "38140", + "38154", + "38165", + "38171", + "38172", + "38173", + "38176", + "38180", + "38189", + "38200", + "38207", + "38210", + "38213", + "38221", + "38222", + "38226", + "38239", + "38251", + "38270", + "38276", + "38282", + "38291", + "38297", + "38305", + "38308", + "38314", + "38318", + "38346", + "38372", + "38373", + "38380", + "38381", + "38382", + "38393", + "38394", + "38404", + "38406", + "38409", + "38410", + "38411", + "38413", + "38424", + "38425", + "38426", + "38428", + "38429", + "38431", + "38432", + "38454", + "38455", + "38456", + "38463", + "38466", + "38470", + "38471", + "38475", + "38476", + "38480", + "38482", + "38488", + "38491", + "38494", + "38495", + "38501", + "38506", + "38536", + "38541", + "38542", + "38548", + "38549", + "38553", + "38557", + "38562", + "38565", + "38573", + "38579", + "38585", + "38587", + "38600", + "38607", + "38625", + "38637", + "38646", + "38648", + "38657", + "38659", + "38664", + "38665", + "38675", + "38676", + "38680", + "38684", + "38693", + "38698", + "38699", + "38704", + "38706", + "38707", + "38710", + "38711", + "38716", + "38722", + "38727", + "38734", + "38741", + "38743", + "38745", + "38749", + "38757", + "38760", + "38781", + "38784", + "38786", + "38788", + "38789", + "38810", + "38824", + "38835", + "38838", + "38851", + "38852", + "38857", + "38867", + "38871", + "38875", + "38877", + "38884", + "38885", + "38888", + "38890", + "38893", + "38900", + "38911", + "38914", + "38922", + "38931", + "38937", + "38941", + "38942", + "38943", + "38945", + "38956", + "38961", + "38970", + "38974", + "38979", + "38987", + "38988", + "38994", + "39007", + "39021", + "39022", + "39029", + "39033", + "39036", + "39045", + "39048", + "39049", + "39052", + "39054", + "39056", + "39062", + "39065", + "39069", + "39072", + "39075", + "39077", + "39078", + "39081", + "39082", + "39090", + "39091", + "39092", + "39093", + "39094", + "39095", + "39097", + "39099", + "39100", + "39102", + "39107", + "39123", + "39129", + "39130", + "39131", + "39151", + "39153", + "39154", + "39158", + "39159", + "39165", + "39166", + "39175", + "39178", + "39180", + "39184", + "39202", + "39203", + "39205", + "39206", + "39208", + "39215", + "39223", + "39230", + "39236", + "39238", + "39239", + "39248", + "39275", + "39287", + "39291", + "39296", + "39301", + "39303", + "39305", + "39307", + "39320", + "39321", + "39323", + "39340", + "39341", + "39351", + "39368", + "39369", + "39373", + "39379", + "39385", + "39387", + "39404", + "39406", + "39410", + "39411", + "39419", + "39424", + "39425", + "39426", + "39427", + "39428", + "39431", + "39436", + "39439", + "39443", + "39455", + "39457", + "39468", + "39472", + "39474", + "39480", + "39497", + "39500", + "39511", + "39513", + "39516", + "39529", + "39535", + "39538", + "39554", + "39555", + "39556", + "39561", + "39566", + "39570", + "39573", + "39575", + "39608", + "39613", + "39614", + "39618", + "39619", + "39622", + "39626", + "39631", + "39638", + "39640", + "39641", + "39649", + "39653", + "39654", + "39658", + "39674", + "39676", + "39678", + "39697", + "39718", + "39723", + "39724", + "39729", + "39731", + "39736", + "39737", + "39740", + "39745", + "39747", + "39752", + "39756", + "39760", + "39761", + "39764", + "39765", + "39787", + "39789", + "39790", + "39791", + "39793", + "39794", + "39798", + "39801", + "39802", + "39805", + "39806", + "39815", + "39817", + "39822", + "39826", + "39830", + "39832", + "39850", + "39855", + "39870", + "39871", + "39878", + "39886", + "39887", + "39889", + "39890", + "39893", + "39912", + "39913", + "39921", + "39928", + "39944", + "39947", + "39955", + "39961", + "39964", + "39966", + "39969", + "39970", + "39973", + "39979", + "40014", + "40015", + "40022", + "40038", + "40041", + "40042", + "40053", + "40055", + "40056", + "40058", + "40060", + "40063", + "40068", + "40070", + "40091", + "40093", + "40096", + "40101", + "40117", + "40122", + "40127", + "40128", + "40131", + "40134", + "40138", + "40140", + "40143", + "40144", + "40164", + "40167", + "40169", + "40170", + "40177", + "40178", + "40180", + "40190", + "40193", + "40197", + "40200", + "40201", + "40202", + "40208", + "40213", + "40218", + "40224", + "40243", + "40247", + "40250", + "40252", + "40253", + "40263", + "40266", + "40268", + "40276", + "40277", + "40282", + "40294", + "40296", + "40299", + "40308", + "40321", + "40333", + "40348", + "40350", + "40353", + "40355", + "40358", + "40362", + "40367", + "40375", + "40377", + "40393", + "40394", + "40401", + "40408", + "40415", + "40416", + "40421", + "40424", + "40436", + "40442", + "40450", + "40457", + "40468", + "40470", + "40474", + "40478", + "40483", + "40498", + "40506", + "40525", + "40534", + "40535", + "40536", + "40539", + "40543", + "40548", + "40556", + "40561", + "40574", + "40575", + "40584", + "40587", + "40590", + "40592", + "40604", + "40607", + "40609", + "40619", + "40626", + "40651", + "40656", + "40660", + "40669", + "40674", + "40677", + "40686", + "40689", + "40691", + "40699", + "40702", + "40712", + "40715", + "40716", + "40723", + "40731", + "40757", + "40761", + "40773", + "40777", + "40782", + "40788", + "40795", + "40804", + "40818", + "40819", + "40821", + "40827", + "40828", + "40829", + "40837", + "40840", + "40841", + "40842", + "40845", + "40849", + "40850", + "40853", + "40864", + "40870", + "40874", + "40875", + "40881", + "40887", + "40889", + "40894", + "40897", + "40901", + "40906", + "40907", + "40918", + "40922", + "40924", + "40926", + "40931", + "40946", + "40952", + "40965", + "40968", + "40974", + "40975", + "40989", + "40995", + "40997", + "41003", + "41004", + "41005", + "41009", + "41012", + "41019", + "41020", + "41034", + "41037", + "41039", + "41044", + "41054", + "41064", + "41069", + "41072", + "41079", + "41083", + "41094", + "41096", + "41108", + "41122", + "41129", + "41132", + "41134", + "41156", + "41158", + "41160", + "41181", + "41193", + "41198", + "41202", + "41204", + "41210", + "41212", + "41214", + "41223", + "41226", + "41233", + "41261", + "41265", + "41270", + "41279", + "41285", + "41292", + "41293", + "41294", + "41299", + "41304", + "41313", + "41314", + "41322", + "41338", + "41345", + "41347", + "41349", + "41350", + "41352", + "41354", + "41355", + "41358", + "41359", + "41365", + "41377", + "41392", + "41398", + "41402", + "41405", + "41411", + "41412", + "41420", + "41422", + "41429", + "41434", + "41449", + "41452", + "41453", + "41456", + "41459", + "41460", + "41467", + "41470", + "41474", + "41480", + "41481", + "41483", + "41485", + "41490", + "41499", + "41500", + "41501", + "41506", + "41514", + "41516", + "41523", + "41528", + "41543", + "41547", + "41549", + "41555", + "41556", + "41558", + "41565", + "41572", + "41573", + "41576", + "41579", + "41581", + "41588", + "41605", + "41625", + "41627", + "41633", + "41637", + "41638", + "41643", + "41645", + "41650", + "41653", + "41665", + "41666", + "41667", + "41668", + "41670", + "41678", + "41685", + "41691", + "41693", + "41695", + "41696", + "41699", + "41717", + "41728", + "41729", + "41736", + "41748", + "41771", + "41775", + "41795", + "41797", + "41806", + "41811", + "41814", + "41826", + "41834", + "41838", + "41843", + "41848", + "41849", + "41852", + "41858", + "41860", + "41872", + "41874", + "41876", + "41882", + "41888", + "41895", + "41899", + "41900", + "41908", + "41912", + "41917", + "41920", + "41922", + "41931", + "41942", + "41949", + "41950", + "41955", + "41960", + "41965", + "41972", + "41976", + "41982", + "41989", + "42000", + "42009", + "42012", + "42014", + "42016", + "42022", + "42026", + "42028", + "42047", + "42052", + "42069", + "42070", + "42071", + "42077", + "42078", + "42081", + "42087", + "42089", + "42091", + "42118", + "42122", + "42126", + "42130", + "42138", + "42144", + "42147", + "42153", + "42164", + "42166", + "42168", + "42169", + "42179", + "42181", + "42187", + "42193", + "42200", + "42205", + "42211", + "42212", + "42215", + "42217", + "42231", + "42236", + "42244", + "42256", + "42265", + "42275", + "42281", + "42288", + "42294", + "42297", + "42304", + "42309", + "42310", + "42311", + "42312", + "42313", + "42318", + "42325", + "42332", + "42335", + "42338", + "42342", + "42345", + "42346", + "42355", + "42363", + "42366", + "42368", + "42369", + "42371", + "42372", + "42385", + "42387", + "42418", + "42419", + "42423", + "42425", + "42428", + "42434", + "42440", + "42444", + "42448", + "42454", + "42458", + "42465", + "42472", + "42475", + "42477", + "42486", + "42488", + "42495", + "42499", + "42512", + "42513", + "42514", + "42515", + "42523", + "42526", + "42527", + "42531", + "42534", + "42540", + "42542", + "42549", + "42550", + "42555", + "42561", + "42569", + "42580", + "42582", + "42588", + "42592", + "42598", + "42600", + "42615", + "42617", + "42626", + "42636", + "42648", + "42666", + "42681", + "42686", + "42706", + "42710", + "42719", + "42720", + "42723", + "42736", + "42747", + "42750", + "42757", + "42758", + "42759", + "42774", + "42777", + "42779", + "42782", + "42792", + "42793", + "42816", + "42823", + "42833", + "42873", + "42884", + "42888", + "42893", + "42898", + "42905", + "42906", + "42909", + "42910", + "42912", + "42920", + "42921", + "42922", + "42926", + "42928", + "42933", + "42938", + "42947", + "42948", + "42952", + "42955", + "42987", + "43000", + "43010", + "43016", + "43028", + "43031", + "43052", + "43054", + "43055", + "43060", + "43066", + "43067", + "43074", + "43078", + "43079", + "43088", + "43091", + "43099", + "43101", + "43107", + "43108", + "43112", + "43114", + "43126", + "43136", + "43147", + "43169", + "43170", + "43182", + "43189", + "43202", + "43204", + "43212", + "43217", + "43228", + "43233", + "43235", + "43240", + "43243", + "43262", + "43264", + "43265", + "43272", + "43279", + "43288", + "43289", + "43291", + "43309", + "43311", + "43324", + "43331", + "43335", + "43338", + "43350", + "43357", + "43364", + "43372", + "43380", + "43381", + "43382", + "43385", + "43392", + "43393", + "43395", + "43399", + "43400", + "43401", + "43402", + "43412", + "43427", + "43428", + "43432", + "43443", + "43446", + "43450", + "43454", + "43457", + "43462", + "43467", + "43469", + "43470", + "43486", + "43488", + "43491", + "43494", + "43500", + "43505", + "43521", + "43522", + "43523", + "43527", + "43532", + "43538", + "43562", + "43564", + "43565", + "43571", + "43574", + "43581", + "43582", + "43588", + "43591", + "43592", + "43597", + "43601", + "43602", + "43604", + "43606", + "43607", + "43612", + "43628", + "43634", + "43644", + "43653", + "43654", + "43667", + "43676", + "43688", + "43689", + "43695", + "43710", + "43711", + "43713", + "43716", + "43717", + "43723", + "43733", + "43742", + "43751", + "43760", + "43771", + "43778", + "43783", + "43791", + "43798", + "43802", + "43805", + "43806", + "43819", + "43821", + "43825", + "43833", + "43837", + "43839", + "43854", + "43856", + "43859", + "43862", + "43864", + "43866", + "43870", + "43872", + "43874", + "43879", + "43887", + "43890", + "43897", + "43900", + "43908", + "43911", + "43915", + "43920", + "43928", + "43934", + "43938", + "43943", + "43946", + "43949", + "43955", + "43956", + "43960", + "43974", + "43982", + "43999", + "44007", + "44022", + "44026", + "44040", + "44042", + "44044", + "44045", + "44053", + "44054", + "44056", + "44057", + "44060", + "44061", + "44066", + "44078", + "44079", + "44084", + "44087", + "44096", + "44100", + "44102", + "44114", + "44130", + "44134", + "44135", + "44156", + "44163", + "44169", + "44172", + "44174", + "44187", + "44192", + "44200", + "44201", + "44202", + "44203", + "44216", + "44217", + "44220", + "44223", + "44224", + "44227", + "44230", + "44238", + "44242", + "44243", + "44244", + "44247", + "44255", + "44268", + "44269", + "44275", + "44278", + "44279", + "44281", + "44285", + "44286", + "44289", + "44294", + "44301", + "44307", + "44318", + "44319", + "44320", + "44334", + "44338", + "44339", + "44342", + "44350", + "44353", + "44354", + "44356", + "44362", + "44366", + "44367", + "44373", + "44374", + "44377", + "44390", + "44394", + "44400", + "44402", + "44405", + "44410", + "44415", + "44427", + "44429", + "44435", + "44441", + "44446", + "44458", + "44465", + "44467", + "44469", + "44471", + "44473", + "44480", + "44483", + "44496", + "44498", + "44508", + "44510", + "44515", + "44523", + "44524", + "44536", + "44555", + "44556", + "44559", + "44560", + "44561", + "44562", + "44569", + "44570", + "44574", + "44580", + "44587", + "44603", + "44608", + "44613", + "44617", + "44619", + "44624", + "44625", + "44629", + "44636", + "44638", + "44640", + "44641", + "44648", + "44654", + "44656", + "44663", + "44673", + "44691", + "44705", + "44708", + "44717", + "44748", + "44761", + "44762", + "44770", + "44772", + "44775", + "44778", + "44780", + "44784", + "44786", + "44787", + "44803", + "44811", + "44818", + "44829", + "44831", + "44833", + "44837", + "44849", + "44851", + "44852", + "44857", + "44858", + "44859", + "44861", + "44862", + "44870", + "44875", + "44882", + "44887", + "44893", + "44897", + "44898", + "44905", + "44909", + "44915", + "44916", + "44917", + "44918", + "44934", + "44936", + "44937", + "44938", + "44940", + "44949", + "44953", + "44959", + "44964", + "44972", + "44973", + "44974", + "44978", + "44984", + "44992", + "44995", + "44997", + "45020", + "45024", + "45028", + "45031", + "45048", + "45051", + "45068", + "45071", + "45076", + "45077", + "45079", + "45080", + "45087", + "45088", + "45099", + "45102", + "45104", + "45116", + "45122", + "45128", + "45136", + "45145", + "45150", + "45151", + "45158", + "45168", + "45170", + "45173", + "45179", + "45182", + "45183", + "45184", + "45185", + "45189", + "45207", + "45208", + "45210", + "45220", + "45231", + "45261", + "45264", + "45266", + "45269", + "45271", + "45289", + "45291", + "45295", + "45296", + "45309", + "45315", + "45316", + "45329", + "45345", + "45347", + "45350", + "45353", + "45364", + "45365", + "45366", + "45367", + "45370", + "45377", + "45378", + "45381", + "45388", + "45390", + "45398", + "45409", + "45412", + "45415", + "45425", + "45430", + "45446", + "45453", + "45455", + "45463", + "45475", + "45478", + "45490", + "45497", + "45499", + "45500", + "45503", + "45514", + "45523", + "45532", + "45537", + "45539", + "45540", + "45541", + "45542", + "45551", + "45563", + "45566", + "45570", + "45577", + "45582", + "45586", + "45605", + "45611", + "45614", + "45619", + "45625", + "45628", + "45630", + "45632", + "45635", + "45637", + "45638", + "45639", + "45644", + "45648", + "45649", + "45661", + "45667", + "45668", + "45671", + "45675", + "45691", + "45695", + "45703", + "45705", + "45707", + "45708", + "45715", + "45718", + "45719", + "45726", + "45729", + "45730", + "45731", + "45736", + "45741", + "45747", + "45755", + "45759", + "45761", + "45768", + "45769", + "45770", + "45771", + "45777", + "45781", + "45786", + "45802", + "45810", + "45813", + "45818", + "45821", + "45833", + "45835", + "45846", + "45848", + "45853", + "45871", + "45888", + "45890", + "45896", + "45897", + "45905", + "45909", + "45911", + "45915", + "45917", + "45919", + "45923", + "45925", + "45928", + "45930", + "45944", + "45950", + "45958", + "45959", + "45966", + "45967", + "45972", + "45976", + "45984", + "45987", + "45988", + "45992", + "45995", + "45997", + "46006", + "46009", + "46011", + "46019", + "46020", + "46022", + "46024", + "46030", + "46038", + "46042", + "46055", + "46058", + "46063", + "46067", + "46070", + "46071", + "46073", + "46078", + "46081", + "46089", + "46090", + "46092", + "46101", + "46105", + "46113", + "46118", + "46124", + "46131", + "46133", + "46139", + "46142", + "46144", + "46147", + "46158", + "46159", + "46161", + "46162", + "46164", + "46167", + "46179", + "46181", + "46182", + "46187", + "46214", + "46216", + "46218", + "46220", + "46232", + "46233", + "46246", + "46247", + "46248", + "46249", + "46251", + "46256", + "46264", + "46268", + "46279", + "46286", + "46292", + "46299", + "46301", + "46302", + "46311", + "46316", + "46325", + "46327", + "46333", + "46338", + "46342", + "46344", + "46351", + "46366", + "46369", + "46378", + "46380", + "46381", + "46382", + "46383", + "46388", + "46395", + "46408", + "46415", + "46417", + "46421", + "46422", + "46426", + "49162", + "49168", + "49169", + "49170", + "49178", + "49185", + "49186", + "49191", + "49194", + "49196", + "49198", + "49210", + "49218", + "49219", + "49223", + "49228", + "49239", + "49243", + "49249", + "49260", + "49267", + "49272", + "49278", + "49286", + "49297", + "49305", + "49306", + "49308", + "49319", + "49323", + "49327", + "49333", + "49341", + "49343", + "49344", + "49347", + "49356", + "49367", + "49369", + "49371", + "49396", + "49399", + "49401", + "49404", + "49405", + "49413", + "49416", + "49422", + "49426", + "49431", + "49434", + "49444", + "49445", + "49453", + "49459", + "49465", + "49468", + "49469", + "49480", + "49482", + "49491", + "49493", + "49503", + "49504", + "49506", + "49509", + "49511", + "49522", + "49525", + "49533", + "49538", + "49543", + "49561", + "49572", + "49576", + "49577", + "49579", + "49580", + "49585", + "49587", + "49593", + "49599", + "49609", + "49613", + "49618", + "49622", + "49636", + "49637", + "49645", + "49657", + "49683", + "49685", + "49695", + "49703", + "49708", + "49709", + "49720", + "49733", + "49737", + "49748", + "49754", + "49755", + "49761", + "49775", + "49776", + "49783", + "49798", + "49801", + "49808", + "49812", + "49815", + "49828", + "49833", + "49840", + "49841", + "49844", + "49849", + "49857", + "49861", + "49864", + "49866", + "49876", + "49890", + "49904", + "49914", + "49922", + "49931", + "49947", + "49951", + "49953", + "49964", + "49965", + "49972", + "49973", + "49978", + "49986", + "49996", + "50002", + "50007", + "50013", + "50017", + "50018", + "50034", + "50035", + "50037", + "50054", + "50063", + "50080", + "50081", + "50084", + "50098", + "50105", + "50107", + "50109", + "50110", + "50121", + "50123", + "50127", + "50138", + "50145", + "50147", + "50148", + "50154", + "50155", + "50160", + "50162", + "50166", + "50173", + "50181", + "50187", + "50188", + "50203", + "50213", + "50220", + "50229", + "50241", + "50247", + "50254", + "50268", + "50276", + "50289", + "50292", + "50299", + "50314", + "50320", + "50325", + "50346", + "50352", + "50353", + "50361", + "50368", + "50369", + "50372", + "50374", + "50378", + "50407", + "50408", + "50410", + "50418", + "50420", + "50425", + "50426", + "50432", + "50435", + "50440", + "50450", + "50451", + "50455", + "50463", + "50468", + "50472", + "50475", + "50482", + "50488", + "50497", + "50501", + "50503", + "50504", + "50519", + "50521", + "50528", + "50537", + "50540", + "50542", + "50545", + "50554", + "50559", + "50564", + "50566", + "50571", + "50575", + "50579", + "50590", + "50599", + "50603", + "50620", + "50624", + "50626", + "50637", + "50639", + "50640", + "50645", + "50649", + "50651", + "50663", + "50669", + "50687", + "50692", + "50695", + "50703", + "50712", + "50721", + "50724", + "50734", + "50743", + "50744", + "50762", + "50764", + "50767", + "50769", + "50773", + "50775", + "50776", + "50780", + "50792", + "50794", + "50803", + "50808", + "50810", + "50814", + "50817", + "50819", + "50824", + "50828", + "50832", + "50834", + "50852", + "50861", + "50867", + "50873", + "50875", + "50882", + "50899", + "50904", + "50909", + "50913", + "50921", + "50925", + "50927", + "50930", + "50936", + "50942", + "50944", + "50947", + "50952", + "50953", + "50961", + "50962", + "50975", + "50978", + "50981", + "50987", + "50994", + "51004", + "51008", + "51010", + "51011", + "51022", + "51024", + "51028", + "51032", + "51033", + "51034", + "51040", + "51041", + "51048", + "51050", + "51054", + "51070", + "51071", + "51078", + "51086", + "51087", + "51093", + "51094", + "51097", + "51110", + "51112", + "51114", + "51116", + "51117", + "51121", + "51122", + "51124", + "51132", + "51136", + "51138", + "51149", + "51156", + "51179", + "51198", + "51201", + "51202", + "51204", + "51210", + "51213", + "51217", + "51218", + "51220", + "51222", + "51228", + "51229", + "51241", + "51252", + "51261", + "51263", + "51268", + "51291", + "51292", + "51301", + "51311", + "51314", + "51316", + "51327", + "51348", + "51363", + "51371", + "51372", + "51378", + "51379", + "51384", + "51388", + "51389", + "51391", + "51400", + "51402", + "51411", + "51424", + "51425", + "51426", + "51429", + "51430", + "51435", + "51438", + "51447", + "51453", + "51459", + "51464", + "51465", + "51469", + "51476", + "51478", + "51481", + "51487", + "51493", + "51494", + "51497", + "51501", + "51503", + "51508", + "51513", + "51520", + "51523", + "51529", + "51533", + "51535", + "51537", + "51538", + "51547", + "51554", + "51559", + "51567", + "51586", + "51588", + "51589", + "51598", + "51605", + "51611", + "51616", + "51621", + "51626", + "51628", + "51634", + "51641", + "51648", + "51649", + "51671", + "51681", + "51688", + "51692", + "51700", + "51702", + "51713", + "51719", + "51723", + "51729", + "51732", + "51733", + "51748", + "51751", + "51755", + "51764", + "51769", + "51772", + "51773", + "51777", + "51778", + "51780", + "51789", + "51792", + "51803", + "51806", + "51817", + "51825", + "51833", + "51835", + "51836", + "51841", + "51847", + "51849", + "51852", + "51855", + "51856", + "51859", + "51861", + "51863", + "51864", + "51872", + "51877", + "51881", + "51887", + "51892", + "51897", + "51904", + "51906", + "51908", + "51912", + "51917", + "51926", + "51928", + "51929", + "51948", + "51951", + "51964", + "51971", + "51972", + "51973", + "51974", + "51975", + "51990", + "51992", + "51996", + "52000", + "52013", + "52021", + "52026", + "52030", + "52036", + "52039", + "52058", + "52060", + "52064", + "52070", + "52081", + "52082", + "52089", + "52092", + "52097", + "52104", + "52106", + "52116", + "52121", + "52122", + "52127", + "52133", + "52134", + "52140", + "52148", + "52152", + "52156", + "52161", + "52162", + "52167", + "52169", + "52173", + "52192", + "52193", + "52196", + "52209", + "52218", + "52228", + "52249", + "52253", + "52260", + "52261", + "52267", + "52269", + "52271", + "52272", + "52273", + "52288", + "52290", + "52301", + "52305", + "52306", + "52313", + "52315", + "52319", + "52322", + "52330", + "52342", + "52346", + "52351", + "52354", + "52363", + "52382", + "52386", + "52390", + "52392", + "52409", + "52427", + "52428", + "52436", + "52459", + "52462", + "52465", + "52485", + "52488", + "52500", + "52502", + "52506", + "52511", + "52516", + "52518", + "52520", + "52524", + "52525", + "52530", + "52548", + "52554", + "52555", + "52563", + "52572", + "52578", + "52584", + "52586", + "52587", + "52589", + "52591", + "52593", + "52609", + "52615", + "52617", + "52623", + "52628", + "52629", + "52631", + "52640", + "52648", + "52649", + "52651", + "52658", + "52670", + "52673", + "52676", + "52681", + "52686", + "52690", + "52698", + "52699", + "52710", + "52712", + "52729", + "52734", + "52742", + "52753", + "52755", + "52763", + "52770", + "52779", + "52781", + "52790", + "52793", + "52802", + "52804", + "52808", + "52817", + "52821", + "52834", + "52835", + "52837", + "52857", + "52858", + "52860", + "52863", + "52872", + "52873", + "52874", + "52878", + "52880", + "52890", + "52893", + "52907", + "52908", + "52911", + "52914", + "52925", + "52930", + "52931", + "52932", + "52936", + "52945", + "52961", + "52966", + "52967", + "52974", + "52976", + "52978", + "52981", + "52983", + "53002", + "53010", + "53022", + "53025", + "53028", + "53029", + "53030", + "53034", + "53039", + "53041", + "53042", + "53059", + "53066", + "53078", + "53081", + "53086", + "53087", + "53089", + "53093", + "53097", + "53099", + "53104", + "53114", + "53115", + "53116", + "53119", + "53121", + "53140", + "53145", + "53162", + "53172", + "53175", + "53180", + "53188", + "53190", + "53202", + "53203", + "53211", + "53212", + "53214", + "53221", + "53223", + "53233", + "53238", + "53239", + "53240", + "53242", + "53251", + "53252", + "53254", + "53255", + "53274", + "53290", + "53292", + "53294", + "53298", + "53301", + "53307", + "53313", + "53323", + "53334", + "53343", + "53367", + "53376", + "53382", + "53383", + "53392", + "53397", + "53405", + "53406", + "53408", + "53418", + "53419", + "53422", + "53423", + "53426", + "53428", + "53430", + "53432", + "53436", + "53443", + "53446", + "53451", + "53463", + "53464", + "53466", + "53469", + "53472", + "53474", + "53477", + "53492", + "53494", + "53497", + "53500", + "53509", + "53510", + "53515", + "53518", + "53535", + "53540", + "53550", + "53554", + "53569", + "53575", + "53582", + "53588", + "53609", + "53615", + "53617", + "53624", + "53629", + "53642", + "53647", + "53648", + "53654", + "53656", + "53657", + "53658", + "53659", + "53663", + "53673", + "53678", + "53680", + "53682", + "53686", + "53701", + "53703", + "53706", + "53711", + "53712", + "53729", + "53731", + "53734", + "53750", + "53763", + "53772", + "53777", + "53781", + "53786", + "53791", + "53796", + "53798", + "53803", + "53818", + "53823", + "53830", + "53832", + "53845", + "53847", + "53852", + "53858", + "53861", + "53867", + "53870", + "53879", + "53881", + "53884", + "53889", + "53895", + "53904", + "53918", + "53921", + "53925", + "53928", + "53930", + "53932", + "53933", + "53950", + "53955", + "53962", + "53963", + "53969", + "53972", + "53986", + "53992", + "53996", + "54024", + "54027", + "54029", + "54030", + "54032", + "54033", + "54035", + "54044", + "54047", + "54048", + "54049", + "54066", + "54067", + "54068", + "54072", + "54076", + "54078", + "54082", + "54086", + "54095", + "54109", + "54127", + "54132", + "54140", + "54141", + "54145", + "54148", + "54149", + "54155", + "54165", + "54187", + "54192", + "54194", + "54204", + "54213", + "54218", + "54225", + "54232", + "54251", + "54255", + "54259", + "54262", + "54270", + "54276", + "54279", + "54282", + "54285", + "54287", + "54293", + "54298", + "54301", + "54303", + "54304", + "54308", + "54312", + "54319", + "54334", + "54345", + "54348", + "54353", + "54354", + "54357", + "54361", + "54368", + "54374", + "54379", + "54383", + "54385", + "54392", + "54396", + "54397", + "54453", + "54462", + "54463", + "54467", + "54472", + "54481", + "54493", + "54495", + "54497", + "54499", + "54506", + "54511", + "54515", + "54523", + "54531", + "54532", + "54534", + "54535", + "54547", + "54549", + "54554", + "54565", + "54567", + "54580", + "54584", + "54585", + "54586", + "54599", + "54600", + "54601", + "54602", + "54607", + "54610", + "54615", + "54621", + "54628", + "54631", + "54636", + "54637", + "54640", + "54644", + "54645", + "54652", + "54655", + "54661", + "54669", + "54672", + "54676", + "54680", + "54689", + "54696", + "54700", + "54714", + "54716", + "54719", + "54721", + "54724", + "54729", + "54754", + "54756", + "54757", + "54762", + "54767", + "54769", + "54775", + "54776", + "54780", + "54787", + "54804", + "54812", + "54816", + "54837", + "54838", + "54842", + "54846", + "54847", + "54852", + "54863", + "54865", + "54869", + "54877", + "54888", + "54889", + "54891", + "54902", + "54905", + "54930", + "54931", + "54933", + "54939", + "54940", + "54948", + "54963", + "54964", + "54965", + "54967", + "54979", + "55003", + "55012", + "55016", + "55019", + "55022", + "55023", + "55024", + "55026", + "55038", + "55041", + "55043", + "55079", + "55096", + "55109", + "55116", + "55122", + "55123", + "55128", + "55134", + "55142", + "55145", + "55146", + "55147", + "55152", + "55165", + "55166", + "55182", + "55189", + "55190", + "55194", + "55200", + "55213", + "55222", + "55235", + "55250", + "55253", + "55254", + "55256", + "55261", + "55267", + "55269", + "55271", + "55278", + "55279", + "55281", + "55283", + "55296", + "55309", + "55310", + "55312", + "55315", + "55317", + "55329", + "55340", + "55346", + "55351", + "55352", + "55357", + "55364", + "55366", + "55371", + "55378", + "55379", + "55386", + "55391", + "55395", + "55397", + "55414", + "55419", + "55423", + "55437", + "55439", + "55443", + "55457", + "55465", + "55467", + "55470", + "55476", + "55480", + "55482", + "55503", + "55504", + "55514", + "55515", + "55523", + "55526", + "55537", + "55541", + "55544", + "55551", + "55565", + "55590", + "55592", + "55595", + "55627", + "55635", + "55638", + "55640", + "55642", + "55643", + "55644", + "55656", + "55661", + "55662", + "55668", + "55669", + "55672", + "55675", + "55689", + "55692", + "55715", + "55719", + "55720", + "55723", + "55725", + "55726", + "55728", + "55730", + "55733", + "55736", + "55737", + "55740", + "55751", + "55753", + "55759", + "55762", + "55767", + "55776", + "55785", + "55786", + "55805", + "55806", + "55807", + "55808", + "55822", + "55823", + "55824", + "55832", + "55852", + "55858", + "55860", + "55864", + "55869", + "55871", + "55873", + "55883", + "55884", + "55893", + "55895", + "55905", + "55912", + "55914", + "55923", + "55931", + "55932", + "55938", + "55940", + "55941", + "55942", + "55950", + "55955", + "55963", + "55973", + "55987", + "55991", + "56000", + "56002", + "56004", + "56009", + "56010", + "56013", + "56032", + "56035", + "56037", + "56038", + "56040", + "56057", + "56063", + "56064", + "56066", + "56067", + "56073", + "56074", + "56076", + "56086", + "56088", + "56094", + "56097", + "56110", + "56113", + "56114", + "56123", + "56124", + "56125", + "56142", + "56150", + "56161", + "56174", + "56178", + "56188", + "56191", + "56196", + "56198", + "56203", + "56204", + "56222", + "56227", + "56231", + "56233", + "56234", + "56239", + "56243", + "56244", + "56251", + "56262", + "56269", + "56273", + "56275", + "56276", + "56277", + "56279", + "56280", + "56281", + "56289", + "56301", + "56302", + "56304", + "56310", + "56320", + "56323", + "56333", + "56335", + "56338", + "56342", + "56348", + "56355", + "56357", + "56359", + "56360", + "56362", + "56363", + "56365", + "56376", + "56381", + "56383", + "56385", + "56395", + "56401", + "56405", + "56419", + "56421", + "56425", + "56426", + "56429", + "56433", + "56446", + "56449", + "56461", + "56464", + "56469", + "56474", + "56482", + "56484", + "56488", + "56494", + "56503", + "56504", + "56509", + "56510", + "56512", + "56515", + "56518", + "56520", + "56534", + "56536", + "56537", + "56539", + "56545", + "56546", + "56553", + "56555", + "56567", + "56577", + "56579", + "56589", + "56590", + "56594", + "56608", + "56612", + "56615", + "56630", + "56637", + "56644", + "56645", + "56650", + "56660", + "56670", + "56674", + "56682", + "56685", + "56686", + "56691", + "56692", + "56705", + "56708", + "56711", + "56712", + "56720", + "56724", + "56731", + "56739", + "56741", + "56751", + "56753", + "56766", + "56771", + "56778", + "56781", + "56788", + "56795", + "56796", + "56803", + "56807", + "56814", + "56816", + "56825", + "56836", + "56840", + "56845", + "56877", + "56878", + "56888", + "56890", + "56896", + "56901", + "56903", + "56906", + "56916", + "56921", + "56930", + "56937", + "56940", + "56944", + "56945", + "56949", + "56960", + "56962", + "56969", + "56970", + "56975", + "56976", + "56983", + "56986", + "56991", + "57001", + "57010", + "57016", + "57018", + "57029", + "57036", + "57039", + "57053", + "57058", + "57060", + "57065", + "57067", + "57069", + "57070", + "57073", + "57074", + "57081", + "57085", + "57097", + "57104", + "57123", + "57137", + "57145", + "57146", + "57148", + "57151", + "57166", + "57175", + "57176", + "57180", + "57183", + "57193", + "57198", + "57199", + "57201", + "57206", + "57216", + "57221", + "57223", + "57224", + "57229", + "57233", + "57237", + "57247", + "57253", + "57260", + "57263", + "57277", + "57281", + "57283", + "57288", + "57296", + "57302", + "57313", + "57315", + "57317", + "57322", + "57323", + "57328", + "57329", + "57350", + "57353", + "57358", + "57360", + "57361", + "57362", + "57366", + "57383", + "57392", + "57404", + "57419", + "57420", + "57433", + "57434", + "57435", + "57438", + "57444", + "57456", + "57468", + "57474", + "57480", + "57485", + "57489", + "57500", + "57510", + "57512", + "57532", + "57537", + "57550", + "57559", + "57560", + "57567", + "57572", + "57574", + "57575", + "57579", + "57583", + "57585", + "57586", + "57588", + "57592", + "57602", + "57604", + "57607", + "57612", + "57622", + "57623", + "57626", + "57636", + "57639", + "57640", + "57648", + "57658", + "57660", + "57670", + "57673", + "57674", + "57688", + "57689", + "57692", + "57702", + "57703", + "57707", + "57713", + "57718", + "57729", + "57733", + "57736", + "57744", + "57746", + "57751", + "57752", + "57756", + "57766", + "57771", + "57773", + "57776", + "57791", + "57792", + "57794", + "57804", + "57806", + "57811", + "57814", + "57824", + "57827", + "57829", + "57830", + "57831", + "57838", + "57840", + "57841", + "57843", + "57846", + "57848", + "57863", + "57870", + "57871", + "57877", + "57880", + "57889", + "57895", + "57897", + "57906", + "57915", + "57920", + "57930", + "57933", + "57934", + "57937", + "57938", + "57942", + "57950", + "57952", + "57955", + "57961", + "57964", + "57966", + "57974", + "57979", + "57986", + "57989", + "57996", + "58000", + "58007", + "58008", + "58016", + "58028", + "58040", + "58041", + "58042", + "58059", + "58068", + "58069", + "58080", + "58082", + "58090", + "58097", + "58101", + "58114", + "58116", + "58117", + "58119", + "58124", + "58130", + "58132", + "58137", + "58147", + "58155", + "58158", + "58159", + "58160", + "58165", + "58172", + "58178", + "58179", + "58181", + "58182", + "58187", + "58190", + "58216", + "58227", + "58229", + "58237", + "58248", + "58254", + "58259", + "58275", + "58282", + "58294", + "58297", + "58302", + "58311", + "58316", + "58318", + "58319", + "58321", + "58327", + "58356", + "58369", + "58381", + "58394", + "58395", + "58398", + "58403", + "58404", + "58421", + "58430", + "58434", + "58435", + "58448", + "58453", + "58455", + "58466", + "58469", + "58478", + "58480", + "58486", + "58495", + "58497", + "58499", + "58503", + "58505", + "58507", + "58513", + "58522", + "58523", + "58524", + "58533", + "58535", + "58540", + "58543", + "58551", + "58552", + "58560", + "58586", + "58593", + "58601", + "58602", + "58603", + "58614", + "58618", + "58638", + "58640", + "58644", + "58646", + "58647", + "58654", + "58655", + "58656", + "58658", + "58676", + "58677", + "58678", + "58687", + "58690", + "58692", + "58694", + "58700", + "58706", + "58734", + "58735", + "58738", + "58740", + "58752", + "58761", + "58764", + "58772", + "58776", + "58787", + "58797", + "58815", + "58821", + "58824", + "58832", + "58835", + "58839", + "58840", + "58843", + "58846", + "58854", + "58858", + "58861", + "58865", + "58871", + "58872", + "58887", + "58890", + "58891", + "58908", + "58914", + "58919", + "58924", + "58928", + "58931", + "58939", + "58942", + "58952", + "58954", + "58961", + "58963", + "58965", + "58966", + "58967", + "58974", + "58986", + "59000", + "59003", + "59006", + "59007", + "59016", + "59036", + "59039", + "59046", + "59050", + "59051", + "59054", + "59055", + "59058", + "59059", + "59067", + "59069", + "59070", + "59071", + "59072", + "59074", + "59081", + "59082", + "59085", + "59086", + "59088", + "59092", + "59093", + "59096", + "59099", + "59101", + "59105", + "59113", + "59123", + "59124", + "59130", + "59133", + "59134", + "59135", + "59137", + "59139", + "59141", + "59142", + "59144", + "59147", + "59149", + "59151", + "59153", + "59162", + "59172", + "59179", + "59182", + "59184", + "59200", + "59203", + "59206", + "59213", + "59234", + "59238", + "59239", + "59241", + "59253", + "59257", + "59261", + "59263", + "59269", + "59283", + "59289", + "59291", + "59292", + "59298", + "59299", + "59304", + "59308", + "59310", + "59311", + "59318", + "59320", + "59323", + "59326", + "59327", + "59329", + "59332", + "59334", + "59337", + "59341", + "59342", + "59348", + "59351", + "59353", + "59368", + "59371", + "59386", + "59398", + "59415", + "59417", + "59419", + "59423", + "59443", + "59445", + "59450", + "59453", + "59456", + "59461", + "59465", + "59472", + "59479", + "59480", + "59481", + "59487", + "59501", + "59502", + "59513", + "59521", + "59523", + "59525", + "59537", + "59544", + "59556", + "59561", + "59562", + "59563", + "59567", + "59570", + "59574", + "59581", + "59588", + "59597", + "59600", + "59604", + "59606", + "59608", + "59615", + "59616", + "59633", + "59639", + "59640", + "59644", + "59645", + "59650", + "59654", + "59655", + "59657", + "59664", + "59666", + "59675", + "59676", + "59693", + "59695", + "59719", + "59727", + "59736", + "59747", + "59749", + "59751", + "59754", + "59757", + "59758", + "59766", + "59782", + "59785", + "59794", + "59795", + "59813", + "59821", + "59822", + "59823", + "59825", + "59834", + "59848", + "59858", + "59862", + "59879", + "59881", + "59886", + "59889", + "59892", + "59893", + "59897", + "59900", + "59901", + "59912", + "59922", + "59927", + "59932", + "59933", + "59941", + "59962", + "59966", + "59980", + "59997", + "59999", + "60010", + "60014", + "60020", + "60023", + "60039", + "60052", + "60067", + "60069", + "60075", + "60089", + "60102", + "60105", + "60107", + "60117", + "60119", + "60124", + "60128", + "60135", + "60148", + "60149", + "60154", + "60162", + "60164", + "60171", + "60175", + "60177", + "60183", + "60189", + "60195", + "60200", + "60209", + "60215", + "60218", + "60219", + "60226", + "60233", + "60241", + "60244", + "60245", + "60250", + "60251", + "60269", + "60270", + "60277", + "60280", + "60285", + "60286", + "60288", + "60289", + "60292", + "60301", + "60307", + "60313", + "60317", + "60318", + "60319", + "60322", + "60327", + "60329", + "60334", + "60351", + "60352", + "60355", + "60360", + "60369", + "60395", + "60396", + "60403", + "60407", + "60408", + "60418", + "60419", + "60421", + "60427", + "60428", + "60434", + "60436", + "60442", + "60443", + "60447", + "60456", + "60457", + "60461", + "60462", + "60471", + "60477", + "60479", + "60487", + "60492", + "60503", + "60507", + "60520", + "60529", + "60562", + "60566", + "60573", + "60576", + "60596", + "60604", + "60612", + "60619", + "60621", + "60629", + "60638", + "60651", + "60652", + "60653", + "60655", + "60662", + "60663", + "60667", + "60674", + "60680", + "60683", + "60687", + "60693", + "60696", + "60702", + "60705", + "60708", + "60714", + "60715", + "60726", + "60734", + "60744", + "60751", + "60753", + "60754", + "60757", + "60758", + "60771", + "60784", + "60789", + "60793", + "60802", + "60803", + "60814", + "60818", + "60828", + "60833", + "60837", + "60838", + "60841", + "60852", + "60858", + "60860", + "60864", + "60893", + "60895", + "60898", + "60910", + "60915", + "60919", + "60927", + "60930", + "60938", + "60939", + "60947", + "60950", + "60956", + "60957", + "60960", + "60967", + "60970", + "60972", + "60981", + "60985", + "60996", + "61005", + "61006", + "61008", + "61009", + "76940", + "77544", + "77646", + "77687", + "77845", + "78242", + "78262", + "78420", + "78693", + "79391", + "79432", + "79806", + "79902", + "79974", + "80186", + "80269", + "80294", + "80461", + "80496", + "80865", + "80941", + "80952", + "81038", + "81057", + "81174", + "81392", + "81544", + "81748", + "81939", + "82086", + "82194", + "82215", + "82391", + "82626", + "82763", + "82851", + "82877", + "82894", + "82965", + "83159", + "84447", + "84651", + "84657", + "84769", + "84781", + "84893", + "85046", + "85099", + "85105", + "85284", + "85285", + "85318", + "85457", + "85459", + "85645", + "85730", + "86116", + "86125", + "86243", + "86667", + "86991", + "87027", + "87381", + "87410", + "87424", + "87679", + "87820", + "87844", + "87873", + "87899", + "88232", + "88255", + "88268", + "88321", + "88395", + "88481", + "88566", + "89119", + "89418", + "89545", + "89700", + "89724", + "89760", + "90098", + "90328", + "90523", + "91139", + "91232", + "91457", + "91493", + "91545", + "91676", + "91752", + "91991", + "92215", + "92364", + "92517", + "92591", + "92772", + "92866", + "93049", + "93079", + "93203", + "93680", + "94170", + "94177", + "94351", + "94416", + "94436", + "94465", + "94664", + "95069", + "95673", + "95761", + "95926", + "95988", + "96001", + "96146", + "96307", + "96754", + "96972", + "96976", + "97021", + "97429", + "98083", + "98114", + "98252", + "98294", + "98398", + "98703", + "98784", + "99358", + "99418", + "99478", + "99932", + "99943" + ], + "seed": 42, + "val_ratio": 0.2, + "fusion_type": "mlp", + "loss_type": "sce", + "split": "stratified_group" +} \ No newline at end of file diff --git a/FMD/dinov2_clip_gated/README.md b/FMD/dinov2_clip_gated/README.md new file mode 100644 index 0000000000000000000000000000000000000000..daebb7ac2018d27b78f5e6d7fdba3bbc8d34714c --- /dev/null +++ b/FMD/dinov2_clip_gated/README.md @@ -0,0 +1,52 @@ +# DINOv2-CLIP + Gated Multimodal Unit on Flickr Material Database + +A material-classification **fusion head** from SegObjectMaterial. It classifies the +material of a masked object from two frozen embeddings: + +| | | +|---|---| +| vision | DINOv2 ViT-B/14 (CLS token, frozen) -> 768-d | +| language | CLIP ViT-L/14 text encoder over Qwen2.5-VL-7B captions (frozen) -> 768-d | +| head | Gated Multimodal Unit (`gated`, defaults), 1,710,858 parameters | +| classes | 10 (Flickr Material Database) | + +**This repo holds only the head.** Features must come from the same encoders, +captioner and prompts as training (see the SegObjectMaterial repository); the +encoders are downloaded from their own model pages under their own licenses. + +## Evaluation + +Held-out split recorded in `split.json` (source images never seen in training). +Single training run -- differences under ~0.5 mIoU points between heads are within +run-to-run noise. + +| mIoU | mAcc | eval samples | +|---|---|---| +| 0.9234 | 0.9599 | 200 | + +## Training + +```json +{ + "learning_rate": 5e-05, + "epochs": 50, + "batch_size": 8, + "weight_decay": 0.0001, + "lr_schedule": "constant", + "early_stopping_patience": 0, + "checkpoint": "best validation loss" +} +``` + +## Use + +```python +from utils.hub import load_head_from_hub # SegObjectMaterial repository +head, info = load_head_from_hub("s0um0r0y/SegObjectMaterial", "FMD/dinov2_clip_gated") +logits = head(vision_features, language_features) # [B, 768], [B, 768] +``` + +## Integrity + +- `model.safetensors` sha256 `de0b96447b176c5791b4cda3b6121e852bf488943c1a7d6fe5c93aef923fe129` +- source config `config/fmd_config.toml`, code commit `1a8130c922267fb0786a33e3854a7e00763cc38f+dirty` diff --git a/FMD/dinov2_clip_gated/config.toml b/FMD/dinov2_clip_gated/config.toml new file mode 100644 index 0000000000000000000000000000000000000000..d7263b77109b57c034150ee80da0a81f61989b6b --- /dev/null +++ b/FMD/dinov2_clip_gated/config.toml @@ -0,0 +1,46 @@ +# FMD (Flickr Material Database) -- BASE pipeline: DINOv2 ViT-B/14 (768) + CLIP text (768) +# +# Pair this with: +# run_serialization_FMD.py -> train.py / train_latest_models.py --config this file +# +# FMD is one object per image, so no connected-component splitting applies here. + +[data] +dataset_type = "FMD" +image_dir = "/image" +mask_dir = "/mask" +# Fresh directory: features are now object-grounded (bbox-cropped vision, +# bbox-prompted captions), so the old fmd_cache_dir/ contents are stale. +tensor_cache_dir = "/fmd_cache_dir_grounded" + +[model] +# fusion head, read by train_latest_models.py. This config always trained "gated" +# (the default when the key was absent) -- best_model_dinov2_clip.pth / best_model_fmd.pth +# are gated heads. config_dinov2_clip_mlp.toml / fmd_config_dinov2_clip_mlp.toml hold the MLP. +fusion = "gated" +vision_dim = 768 +language_dim = 768 +num_classes = 10 + +[training] +batch_size = 8 + +# Batch size for the OFFLINE SERIALIZATION pass, which is a completely different +# memory regime from training: it pushes full-resolution images through the 7B +# VLM, whereas [training].batch_size only moves cached 768-d vectors through a +# small MLP. Measured on the 23.6 GiB 4090 -- static weights 16.2 GiB, so only +# ~7.4 GiB is left: batch 8 peaks at 17.7 GiB, 16 at 19.2 GiB, and 32 OOMs. +# 8 leaves headroom for a labmate's job to coexist; raise to 16 on a free card. +serialization_batch_size = 8 +learning_rate = 5e-5 +epochs = 50 +train_ratio = 0.8 # 80% for training +val_ratio = 0.2 # 20% for validation +tensorboard_log_dir = "/fmd_dinov2_clip" + +[inference] +checkpoint_path = "/best_model_fmd.pth" + +[logging] +wandb_project = "material-classification" +wandb_run_name = "fmd-dinov2-clip-grounded" diff --git a/FMD/dinov2_clip_gated/head.json b/FMD/dinov2_clip_gated/head.json new file mode 100644 index 0000000000000000000000000000000000000000..74b1c5fc67f1d0618c50854672aeda57b4fe0e6e --- /dev/null +++ b/FMD/dinov2_clip_gated/head.json @@ -0,0 +1,52 @@ +{ + "fusion": "gated", + "head": "Gated Multimodal Unit", + "head_kwargs": {}, + "vision_dim": 768, + "language_dim": 768, + "num_classes": 10, + "classes": [ + "fabric", + "foliage", + "glass", + "leather", + "metal", + "paper", + "plastic", + "stone", + "water", + "wood" + ], + "dataset": "Flickr Material Database", + "dataset_key": "FMD", + "encoders": { + "vision": "DINOv2 ViT-B/14 (CLS token, frozen)", + "language": "CLIP ViT-L/14 text encoder over Qwen2.5-VL-7B captions (frozen)", + "short": "DINOv2-CLIP", + "slug": "dinov2_clip" + }, + "parameters": 1710858, + "training": { + "learning_rate": 5e-05, + "epochs": 50, + "batch_size": 8, + "weight_decay": 0.0001, + "lr_schedule": "constant", + "early_stopping_patience": 0, + "checkpoint": "best validation loss" + }, + "sha256": { + "safetensors": "de0b96447b176c5791b4cda3b6121e852bf488943c1a7d6fe5c93aef923fe129", + "pth": "7b647320af187b147d315410c4e57b6785f0fea67b4cdbb9abfbe748865173f1" + }, + "source": { + "config": "config/fmd_config.toml", + "git_commit": "1a8130c922267fb0786a33e3854a7e00763cc38f+dirty", + "checkpoint_mtime": "2026-09-17T10:20:08" + }, + "metrics": { + "mIoU": 0.9233914331282753, + "mAcc": 0.9599498746867168, + "eval_samples": 200 + } +} \ No newline at end of file diff --git a/FMD/dinov2_clip_gated/metrics.json b/FMD/dinov2_clip_gated/metrics.json new file mode 100644 index 0000000000000000000000000000000000000000..865de24d58d8af0b1c96de7e045f6a3d1b379283 --- /dev/null +++ b/FMD/dinov2_clip_gated/metrics.json @@ -0,0 +1,61 @@ +{ + "dataset": "FMD", + "config": "config/fmd_config.toml", + "checkpoint": "/best_model_fmd.pth", + "fusion_type": "gated", + "num_eval_samples": 200, + "mIoU": 0.9233914331282753, + "mAcc": 0.9599498746867168, + "per_class": { + "fabric": { + "accuracy": 0.95, + "iou": 0.9047619047619048, + "support": 20 + }, + "foliage": { + "accuracy": 1.0, + "iou": 0.9545454545454546, + "support": 21 + }, + "glass": { + "accuracy": 1.0, + "iou": 0.8636363636363636, + "support": 19 + }, + "leather": { + "accuracy": 0.95, + "iou": 0.95, + "support": 20 + }, + "metal": { + "accuracy": 1.0, + "iou": 0.9090909090909091, + "support": 20 + }, + "paper": { + "accuracy": 1.0, + "iou": 0.9523809523809523, + "support": 20 + }, + "plastic": { + "accuracy": 0.9, + "iou": 0.9, + "support": 20 + }, + "stone": { + "accuracy": 0.9047619047619048, + "iou": 0.9047619047619048, + "support": 21 + }, + "water": { + "accuracy": 0.8947368421052632, + "iou": 0.8947368421052632, + "support": 19 + }, + "wood": { + "accuracy": 1.0, + "iou": 1.0, + "support": 20 + } + } +} \ No newline at end of file diff --git a/FMD/dinov2_clip_gated/model.pth b/FMD/dinov2_clip_gated/model.pth new file mode 100644 index 0000000000000000000000000000000000000000..23d07fad522eb1fe607316e2d147e025236569d5 --- /dev/null +++ b/FMD/dinov2_clip_gated/model.pth @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b647320af187b147d315410c4e57b6785f0fea67b4cdbb9abfbe748865173f1 +size 6862358 diff --git a/FMD/dinov2_clip_gated/model.safetensors b/FMD/dinov2_clip_gated/model.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..6f86f909a3c19f01c9f426be2ae361fb1f39a0e7 --- /dev/null +++ b/FMD/dinov2_clip_gated/model.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de0b96447b176c5791b4cda3b6121e852bf488943c1a7d6fe5c93aef923fe129 +size 6855856 diff --git a/FMD/dinov2_clip_gated/split.json b/FMD/dinov2_clip_gated/split.json new file mode 100644 index 0000000000000000000000000000000000000000..986c6131c08951d49771af6441182cf0b2749bb8 --- /dev/null +++ b/FMD/dinov2_clip_gated/split.json @@ -0,0 +1,209 @@ +{ + "val_groups": [ + "fabric_moderate_001_new", + "fabric_moderate_006_new", + "fabric_moderate_011_new", + "fabric_moderate_017_new", + "fabric_moderate_022_new", + "fabric_moderate_028_new", + "fabric_moderate_034_new", + "fabric_moderate_035_new", + "fabric_moderate_042_new", + "fabric_moderate_048_new", + "fabric_object_001_new", + "fabric_object_008_new", + "fabric_object_011_new", + "fabric_object_017_new", + "fabric_object_021_new", + "fabric_object_024_new", + "fabric_object_033_new", + "fabric_object_035_new", + "fabric_object_043_new", + "fabric_object_046_new", + "foliage_final_001_new", + "foliage_final_003_new", + "foliage_final_012_new", + "foliage_final_018_new", + "foliage_final_021_new", + "foliage_final_026_new", + "foliage_final_033_new", + "foliage_final_036_new", + "foliage_final_041_new", + "foliage_final_046_new", + "foliage_final_050_new", + "foliage_final_058_new", + "foliage_final_061_new", + "foliage_final_065_new", + "foliage_final_072_new", + "foliage_final_076_new", + "foliage_final_078_new", + "foliage_final_086_new", + "foliage_final_092_new", + "foliage_final_097_new", + "foliage_final_099_new", + "glass_moderate_008_new", + "glass_moderate_011_new", + "glass_moderate_017_new", + "glass_moderate_022_new", + "glass_moderate_027_new", + "glass_moderate_032_new", + "glass_moderate_037_new", + "glass_moderate_041_new", + "glass_moderate_046_new", + "glass_object_003_new", + "glass_object_006_new", + "glass_object_012_new", + "glass_object_016_new", + "glass_object_023_new", + "glass_object_026_new", + "glass_object_032_new", + "glass_object_034_new", + "glass_object_043_new", + "glass_object_045_new", + "leather_moderate_002_new", + "leather_moderate_006_new", + "leather_moderate_011_new", + "leather_moderate_017_new", + "leather_moderate_021_new", + "leather_moderate_028_new", + "leather_moderate_031_new", + "leather_moderate_036_new", + "leather_moderate_042_new", + "leather_moderate_047_new", + "leather_object_001_new", + "leather_object_006_new", + "leather_object_014_new", + "leather_object_019_new", + "leather_object_021_new", + "leather_object_026_new", + "leather_object_031_new", + "leather_object_036_new", + "leather_object_041_new", + "leather_object_046_new", + "metal_moderate_003_new", + "metal_moderate_005_new", + "metal_moderate_015_new", + "metal_moderate_017_new", + "metal_moderate_021_new", + "metal_moderate_022_new", + "metal_moderate_031_new", + "metal_moderate_038_new", + "metal_moderate_042_new", + "metal_moderate_049_new", + "metal_object_001_new", + "metal_object_009_new", + "metal_object_010_new", + "metal_object_017_new", + "metal_object_021_new", + "metal_object_027_new", + "metal_object_032_new", + "metal_object_037_new", + "metal_object_041_new", + "metal_object_046_new", + "paper_moderate_001_new", + "paper_moderate_006_new", + "paper_moderate_011_new", + "paper_moderate_016_new", + "paper_moderate_021_new", + "paper_moderate_026_new", + "paper_moderate_033_new", + "paper_moderate_036_new", + "paper_moderate_043_new", + "paper_moderate_046_new", + "paper_moderate_048_new", + "paper_object_007_new", + "paper_object_009_new", + "paper_object_016_new", + "paper_object_021_new", + "paper_object_029_new", + "paper_object_032_new", + "paper_object_037_new", + "paper_object_042_new", + "paper_object_044_new", + "plastic_moderate_002_new", + "plastic_moderate_006_new", + "plastic_moderate_010_new", + "plastic_moderate_016_new", + "plastic_moderate_022_new", + "plastic_moderate_027_new", + "plastic_moderate_032_new", + "plastic_moderate_034_new", + "plastic_moderate_041_new", + "plastic_moderate_044_new", + "plastic_moderate_050_new", + "plastic_object_006_new", + "plastic_object_010_new", + "plastic_object_015_new", + "plastic_object_016_new", + "plastic_object_027_new", + "plastic_object_033_new", + "plastic_object_036_new", + "plastic_object_042_new", + "plastic_object_046_new", + "stone_moderate_001_new", + "stone_moderate_005_new", + "stone_moderate_012_new", + "stone_moderate_014_new", + "stone_moderate_022_new", + "stone_moderate_028_new", + "stone_moderate_031_new", + "stone_moderate_033_new", + "stone_moderate_040_new", + "stone_moderate_046_new", + "stone_object_002_new", + "stone_object_003_new", + "stone_object_013_new", + "stone_object_016_new", + "stone_object_018_new", + "stone_object_025_new", + "stone_object_032_new", + "stone_object_034_new", + "stone_object_040_new", + "stone_object_045_new", + "stone_object_047_new", + "water_moderate_003_new", + "water_moderate_013_new", + "water_moderate_015_new", + "water_moderate_018_new", + "water_moderate_026_new", + "water_moderate_030_new", + "water_moderate_034_new", + "water_moderate_042_new", + "water_moderate_047_new", + "water_object_001_new", + "water_object_007_new", + "water_object_012_new", + "water_object_017_new", + "water_object_022_new", + "water_object_026_new", + "water_object_031_new", + "water_object_037_new", + "water_object_047_new", + "water_object_048_new", + "wood_moderate_001_new", + "wood_moderate_006_new", + "wood_moderate_011_new", + "wood_moderate_015_new", + "wood_moderate_021_new", + "wood_moderate_029_new", + "wood_moderate_033_new", + "wood_moderate_035_new", + "wood_moderate_042_new", + "wood_moderate_047_new", + "wood_object_001_new", + "wood_object_003_new", + "wood_object_011_new", + "wood_object_019_new", + "wood_object_022_new", + "wood_object_026_new", + "wood_object_032_new", + "wood_object_036_new", + "wood_object_038_new", + "wood_object_047_new" + ], + "seed": 42, + "val_ratio": 0.2, + "fusion_type": "gated", + "loss_type": "sce", + "split": "stratified_group" +} \ No newline at end of file diff --git a/FMD/dinov2_clip_mlp/README.md b/FMD/dinov2_clip_mlp/README.md new file mode 100644 index 0000000000000000000000000000000000000000..54c73c2dc4a4295748184cf04fbacdc5fd89e2e4 --- /dev/null +++ b/FMD/dinov2_clip_mlp/README.md @@ -0,0 +1,52 @@ +# DINOv2-CLIP + Concat + MLP on Flickr Material Database + +A material-classification **fusion head** from SegObjectMaterial. It classifies the +material of a masked object from two frozen embeddings: + +| | | +|---|---| +| vision | DINOv2 ViT-B/14 (CLS token, frozen) -> 768-d | +| language | CLIP ViT-L/14 text encoder over Qwen2.5-VL-7B captions (frozen) -> 768-d | +| head | Concat + MLP (`mlp`, defaults), 922,378 parameters | +| classes | 10 (Flickr Material Database) | + +**This repo holds only the head.** Features must come from the same encoders, +captioner and prompts as training (see the SegObjectMaterial repository); the +encoders are downloaded from their own model pages under their own licenses. + +## Evaluation + +Held-out split recorded in `split.json` (source images never seen in training). +Single training run -- differences under ~0.5 mIoU points between heads are within +run-to-run noise. + +| mIoU | mAcc | eval samples | +|---|---|---| +| 0.9612 | 0.9802 | 200 | + +## Training + +```json +{ + "learning_rate": 5e-05, + "epochs": 50, + "batch_size": 8, + "weight_decay": 0.0001, + "lr_schedule": "constant", + "early_stopping_patience": 0, + "checkpoint": "best validation loss" +} +``` + +## Use + +```python +from utils.hub import load_head_from_hub # SegObjectMaterial repository +head, info = load_head_from_hub("s0um0r0y/SegObjectMaterial", "FMD/dinov2_clip_mlp") +logits = head(vision_features, language_features) # [B, 768], [B, 768] +``` + +## Integrity + +- `model.safetensors` sha256 `39bd2e6d4d1662621b735a5f4dbc3aa17c893a52843e0a867197e1be89e3e644` +- source config `config/fmd_config_dinov2_clip_mlp.toml`, code commit `1a8130c922267fb0786a33e3854a7e00763cc38f+dirty` diff --git a/FMD/dinov2_clip_mlp/config.toml b/FMD/dinov2_clip_mlp/config.toml new file mode 100644 index 0000000000000000000000000000000000000000..49bb2cd2997d13e14e149b065acc17effdf8a48b --- /dev/null +++ b/FMD/dinov2_clip_mlp/config.toml @@ -0,0 +1,52 @@ +# DINOv2-CLIP + concat-MLP head: the ORIGINAL-PAPER fusion, retrained on the +# current grounded cache. The old MLP checkpoints (best_model.pth / _v2) were +# trained on a cache that no longer exists, with no held-out split recorded, so +# they cannot be evaluated fairly. Same cache as fmd_config.toml; +# own checkpoint, TensorBoard dir and W&B run, so nothing is overwritten. +# Baseline recipe (wd 1e-4, constant LR, 50 epochs) to match the other baseline rows. + +# FMD (Flickr Material Database) -- BASE pipeline: DINOv2 ViT-B/14 (768) + CLIP text (768) +# +# Pair this with: +# run_serialization_FMD.py -> train.py / train_latest_models.py --config this file +# +# FMD is one object per image, so no connected-component splitting applies here. + +[data] +dataset_type = "FMD" +image_dir = "/image" +mask_dir = "/mask" +# Fresh directory: features are now object-grounded (bbox-cropped vision, +# bbox-prompted captions), so the old fmd_cache_dir/ contents are stale. +tensor_cache_dir = "/fmd_cache_dir_grounded" + +[model] +# fusion head: read by train_latest_models.py. Without this key it defaults to +# "gated" -- which is how best_model_dinov2_clip.pth / best_model_fmd.pth were trained. +fusion = "mlp" +vision_dim = 768 +language_dim = 768 +num_classes = 10 + +[training] +batch_size = 8 + +# Batch size for the OFFLINE SERIALIZATION pass, which is a completely different +# memory regime from training: it pushes full-resolution images through the 7B +# VLM, whereas [training].batch_size only moves cached 768-d vectors through a +# small MLP. Measured on the 23.6 GiB 4090 -- static weights 16.2 GiB, so only +# ~7.4 GiB is left: batch 8 peaks at 17.7 GiB, 16 at 19.2 GiB, and 32 OOMs. +# 8 leaves headroom for a labmate's job to coexist; raise to 16 on a free card. +serialization_batch_size = 8 +learning_rate = 5e-5 +epochs = 50 +train_ratio = 0.8 # 80% for training +val_ratio = 0.2 # 20% for validation +tensorboard_log_dir = "/fmd_dinov2_clip_mlp" + +[inference] +checkpoint_path = "/best_model_fmd_dinov2_clip_mlp.pth" + +[logging] +wandb_project = "material-classification" +wandb_run_name = "fmd-dinov2-clip-mlp" diff --git a/FMD/dinov2_clip_mlp/head.json b/FMD/dinov2_clip_mlp/head.json new file mode 100644 index 0000000000000000000000000000000000000000..21a8bd5b801ea619c7fed5466cee00cef87a6799 --- /dev/null +++ b/FMD/dinov2_clip_mlp/head.json @@ -0,0 +1,52 @@ +{ + "fusion": "mlp", + "head": "Concat + MLP", + "head_kwargs": {}, + "vision_dim": 768, + "language_dim": 768, + "num_classes": 10, + "classes": [ + "fabric", + "foliage", + "glass", + "leather", + "metal", + "paper", + "plastic", + "stone", + "water", + "wood" + ], + "dataset": "Flickr Material Database", + "dataset_key": "FMD", + "encoders": { + "vision": "DINOv2 ViT-B/14 (CLS token, frozen)", + "language": "CLIP ViT-L/14 text encoder over Qwen2.5-VL-7B captions (frozen)", + "short": "DINOv2-CLIP", + "slug": "dinov2_clip" + }, + "parameters": 922378, + "training": { + "learning_rate": 5e-05, + "epochs": 50, + "batch_size": 8, + "weight_decay": 0.0001, + "lr_schedule": "constant", + "early_stopping_patience": 0, + "checkpoint": "best validation loss" + }, + "sha256": { + "safetensors": "39bd2e6d4d1662621b735a5f4dbc3aa17c893a52843e0a867197e1be89e3e644", + "pth": "31aebbdc45c998b1503548275bef5854cab209749bbebedc73c1cc7056c32955" + }, + "source": { + "config": "config/fmd_config_dinov2_clip_mlp.toml", + "git_commit": "1a8130c922267fb0786a33e3854a7e00763cc38f+dirty", + "checkpoint_mtime": "2026-10-08T23:33:29" + }, + "metrics": { + "mIoU": 0.9611654135338344, + "mAcc": 0.9802130325814536, + "eval_samples": 200 + } +} \ No newline at end of file diff --git a/FMD/dinov2_clip_mlp/metrics.json b/FMD/dinov2_clip_mlp/metrics.json new file mode 100644 index 0000000000000000000000000000000000000000..d085d4521b5cee3a3d93ee6246232a8ea8342b1a --- /dev/null +++ b/FMD/dinov2_clip_mlp/metrics.json @@ -0,0 +1,61 @@ +{ + "dataset": "FMD", + "config": "config/fmd_config_dinov2_clip_mlp.toml", + "checkpoint": "/best_model_fmd_dinov2_clip_mlp.pth", + "fusion_type": "mlp", + "num_eval_samples": 200, + "mIoU": 0.9611654135338344, + "mAcc": 0.9802130325814536, + "per_class": { + "fabric": { + "accuracy": 0.95, + "iou": 0.95, + "support": 20 + }, + "foliage": { + "accuracy": 1.0, + "iou": 1.0, + "support": 21 + }, + "glass": { + "accuracy": 1.0, + "iou": 0.9047619047619048, + "support": 19 + }, + "leather": { + "accuracy": 1.0, + "iou": 1.0, + "support": 20 + }, + "metal": { + "accuracy": 1.0, + "iou": 0.9523809523809523, + "support": 20 + }, + "paper": { + "accuracy": 1.0, + "iou": 0.9523809523809523, + "support": 20 + }, + "plastic": { + "accuracy": 1.0, + "iou": 1.0, + "support": 20 + }, + "stone": { + "accuracy": 0.9047619047619048, + "iou": 0.9047619047619048, + "support": 21 + }, + "water": { + "accuracy": 0.9473684210526315, + "iou": 0.9473684210526315, + "support": 19 + }, + "wood": { + "accuracy": 1.0, + "iou": 1.0, + "support": 20 + } + } +} \ No newline at end of file diff --git a/FMD/dinov2_clip_mlp/model.pth b/FMD/dinov2_clip_mlp/model.pth new file mode 100644 index 0000000000000000000000000000000000000000..e80c7295f761d4a9b884b01fb6a2046203621296 --- /dev/null +++ b/FMD/dinov2_clip_mlp/model.pth @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31aebbdc45c998b1503548275bef5854cab209749bbebedc73c1cc7056c32955 +size 3701746 diff --git a/FMD/dinov2_clip_mlp/model.safetensors b/FMD/dinov2_clip_mlp/model.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..9021c382ba22faf0bff31d392ca63c3d082a9119 --- /dev/null +++ b/FMD/dinov2_clip_mlp/model.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39bd2e6d4d1662621b735a5f4dbc3aa17c893a52843e0a867197e1be89e3e644 +size 3696944 diff --git a/FMD/dinov2_clip_mlp/split.json b/FMD/dinov2_clip_mlp/split.json new file mode 100644 index 0000000000000000000000000000000000000000..7e118a4137e87b24aafeb55317981780a9df78fc --- /dev/null +++ b/FMD/dinov2_clip_mlp/split.json @@ -0,0 +1,209 @@ +{ + "val_groups": [ + "fabric_moderate_001_new", + "fabric_moderate_006_new", + "fabric_moderate_011_new", + "fabric_moderate_017_new", + "fabric_moderate_022_new", + "fabric_moderate_028_new", + "fabric_moderate_034_new", + "fabric_moderate_035_new", + "fabric_moderate_042_new", + "fabric_moderate_048_new", + "fabric_object_001_new", + "fabric_object_008_new", + "fabric_object_011_new", + "fabric_object_017_new", + "fabric_object_021_new", + "fabric_object_024_new", + "fabric_object_033_new", + "fabric_object_035_new", + "fabric_object_043_new", + "fabric_object_046_new", + "foliage_final_001_new", + "foliage_final_003_new", + "foliage_final_012_new", + "foliage_final_018_new", + "foliage_final_021_new", + "foliage_final_026_new", + "foliage_final_033_new", + "foliage_final_036_new", + "foliage_final_041_new", + "foliage_final_046_new", + "foliage_final_050_new", + "foliage_final_058_new", + "foliage_final_061_new", + "foliage_final_065_new", + "foliage_final_072_new", + "foliage_final_076_new", + "foliage_final_078_new", + "foliage_final_086_new", + "foliage_final_092_new", + "foliage_final_097_new", + "foliage_final_099_new", + "glass_moderate_008_new", + "glass_moderate_011_new", + "glass_moderate_017_new", + "glass_moderate_022_new", + "glass_moderate_027_new", + "glass_moderate_032_new", + "glass_moderate_037_new", + "glass_moderate_041_new", + "glass_moderate_046_new", + "glass_object_003_new", + "glass_object_006_new", + "glass_object_012_new", + "glass_object_016_new", + "glass_object_023_new", + "glass_object_026_new", + "glass_object_032_new", + "glass_object_034_new", + "glass_object_043_new", + "glass_object_045_new", + "leather_moderate_002_new", + "leather_moderate_006_new", + "leather_moderate_011_new", + "leather_moderate_017_new", + "leather_moderate_021_new", + "leather_moderate_028_new", + "leather_moderate_031_new", + "leather_moderate_036_new", + "leather_moderate_042_new", + "leather_moderate_047_new", + "leather_object_001_new", + "leather_object_006_new", + "leather_object_014_new", + "leather_object_019_new", + "leather_object_021_new", + "leather_object_026_new", + "leather_object_031_new", + "leather_object_036_new", + "leather_object_041_new", + "leather_object_046_new", + "metal_moderate_003_new", + "metal_moderate_005_new", + "metal_moderate_015_new", + "metal_moderate_017_new", + "metal_moderate_021_new", + "metal_moderate_022_new", + "metal_moderate_031_new", + "metal_moderate_038_new", + "metal_moderate_042_new", + "metal_moderate_049_new", + "metal_object_001_new", + "metal_object_009_new", + "metal_object_010_new", + "metal_object_017_new", + "metal_object_021_new", + "metal_object_027_new", + "metal_object_032_new", + "metal_object_037_new", + "metal_object_041_new", + "metal_object_046_new", + "paper_moderate_001_new", + "paper_moderate_006_new", + "paper_moderate_011_new", + "paper_moderate_016_new", + "paper_moderate_021_new", + "paper_moderate_026_new", + "paper_moderate_033_new", + "paper_moderate_036_new", + "paper_moderate_043_new", + "paper_moderate_046_new", + "paper_moderate_048_new", + "paper_object_007_new", + "paper_object_009_new", + "paper_object_016_new", + "paper_object_021_new", + "paper_object_029_new", + "paper_object_032_new", + "paper_object_037_new", + "paper_object_042_new", + "paper_object_044_new", + "plastic_moderate_002_new", + "plastic_moderate_006_new", + "plastic_moderate_010_new", + "plastic_moderate_016_new", + "plastic_moderate_022_new", + "plastic_moderate_027_new", + "plastic_moderate_032_new", + "plastic_moderate_034_new", + "plastic_moderate_041_new", + "plastic_moderate_044_new", + "plastic_moderate_050_new", + "plastic_object_006_new", + "plastic_object_010_new", + "plastic_object_015_new", + "plastic_object_016_new", + "plastic_object_027_new", + "plastic_object_033_new", + "plastic_object_036_new", + "plastic_object_042_new", + "plastic_object_046_new", + "stone_moderate_001_new", + "stone_moderate_005_new", + "stone_moderate_012_new", + "stone_moderate_014_new", + "stone_moderate_022_new", + "stone_moderate_028_new", + "stone_moderate_031_new", + "stone_moderate_033_new", + "stone_moderate_040_new", + "stone_moderate_046_new", + "stone_object_002_new", + "stone_object_003_new", + "stone_object_013_new", + "stone_object_016_new", + "stone_object_018_new", + "stone_object_025_new", + "stone_object_032_new", + "stone_object_034_new", + "stone_object_040_new", + "stone_object_045_new", + "stone_object_047_new", + "water_moderate_003_new", + "water_moderate_013_new", + "water_moderate_015_new", + "water_moderate_018_new", + "water_moderate_026_new", + "water_moderate_030_new", + "water_moderate_034_new", + "water_moderate_042_new", + "water_moderate_047_new", + "water_object_001_new", + "water_object_007_new", + "water_object_012_new", + "water_object_017_new", + "water_object_022_new", + "water_object_026_new", + "water_object_031_new", + "water_object_037_new", + "water_object_047_new", + "water_object_048_new", + "wood_moderate_001_new", + "wood_moderate_006_new", + "wood_moderate_011_new", + "wood_moderate_015_new", + "wood_moderate_021_new", + "wood_moderate_029_new", + "wood_moderate_033_new", + "wood_moderate_035_new", + "wood_moderate_042_new", + "wood_moderate_047_new", + "wood_object_001_new", + "wood_object_003_new", + "wood_object_011_new", + "wood_object_019_new", + "wood_object_022_new", + "wood_object_026_new", + "wood_object_032_new", + "wood_object_036_new", + "wood_object_038_new", + "wood_object_047_new" + ], + "seed": 42, + "val_ratio": 0.2, + "fusion_type": "mlp", + "loss_type": "sce", + "split": "stratified_group" +} \ No newline at end of file diff --git a/FMD/dinov3_siglip2_gated/README.md b/FMD/dinov3_siglip2_gated/README.md new file mode 100644 index 0000000000000000000000000000000000000000..693907f4362578cb8030b8501e8d8a7839c52932 --- /dev/null +++ b/FMD/dinov3_siglip2_gated/README.md @@ -0,0 +1,52 @@ +# DINOv3-SigLIP2 + Gated Multimodal Unit on Flickr Material Database + +A material-classification **fusion head** from SegObjectMaterial. It classifies the +material of a masked object from two frozen embeddings: + +| | | +|---|---| +| vision | DINOv3 ViT-L/16 (CLS token, frozen) -> 1024-d | +| language | SigLIP2 base text encoder over Qwen3-VL-8B captions (frozen) -> 768-d | +| head | Gated Multimodal Unit (`gated`, defaults), 1,973,002 parameters | +| classes | 10 (Flickr Material Database) | + +**This repo holds only the head.** Features must come from the same encoders, +captioner and prompts as training (see the SegObjectMaterial repository); the +encoders are downloaded from their own model pages under their own licenses. + +## Evaluation + +Held-out split recorded in `split.json` (source images never seen in training). +Single training run -- differences under ~0.5 mIoU points between heads are within +run-to-run noise. + +| mIoU | mAcc | eval samples | +|---|---|---| +| 0.9707 | 0.9850 | 200 | + +## Training + +```json +{ + "learning_rate": 5e-05, + "epochs": 50, + "batch_size": 8, + "weight_decay": 0.0001, + "lr_schedule": "constant", + "early_stopping_patience": 0, + "checkpoint": "best validation loss" +} +``` + +## Use + +```python +from utils.hub import load_head_from_hub # SegObjectMaterial repository +head, info = load_head_from_hub("s0um0r0y/SegObjectMaterial", "FMD/dinov3_siglip2_gated") +logits = head(vision_features, language_features) # [B, 1024], [B, 768] +``` + +## Integrity + +- `model.safetensors` sha256 `4d1fdc321104c65bebbe8ff4e8d974afa7c011f4ffe03896bafe76435fcb3cd0` +- source config `config/fmd_config_latest_models.toml`, code commit `1a8130c922267fb0786a33e3854a7e00763cc38f+dirty` diff --git a/FMD/dinov3_siglip2_gated/config.toml b/FMD/dinov3_siglip2_gated/config.toml new file mode 100644 index 0000000000000000000000000000000000000000..21b639e6a8f8bedf461995c54c09788c3aa34d52 --- /dev/null +++ b/FMD/dinov3_siglip2_gated/config.toml @@ -0,0 +1,47 @@ +# FMD (Flickr Material Database) -- LATEST-MODELS pipeline: +# DINOv3 ViT-L/16 -> 1024-d vision +# Qwen3-VL -> SigLIP2 -> 768-d language +# +# Pair this with: +# run_serialization_FMD_latest_models.py +# -> train_latest_models.py --config config/fmd_config_latest_models.toml +# +# The dims below MUST match those streams. config/fmd_config.toml is the BASE +# (DINOv2 768 + CLIP 768) equivalent; the two caches are NOT interchangeable, +# which is why they live in separate directories. +# +# FMD is one object per image, so connected-component splitting does not apply. + +[data] +dataset_type = "FMD" +image_dir = "/image" +mask_dir = "/mask" +tensor_cache_dir = "/fmd_cache_dir_latest_models" + +[model] +# fusion head: "gated" (GMU) or "mlp" (concat+MLP). Read by train_latest_models.py; a contradicting --fusion flag is an error, so checkpoint_path can't hold the wrong head. +fusion = "gated" +vision_dim = 1024 # DINOv3 ViT-L/16 CLS token +language_dim = 768 # SigLIP2 base text embedding +num_classes = 10 + +[training] +batch_size = 8 + +# Serialization is a different memory regime from training: it pushes full +# images through an 8B VLM, while [training].batch_size only moves cached +# vectors through a small MLP. Qwen3-VL-8B + DINOv3 ViT-L are both larger than +# the base pair, so keep this conservative. 8 measured safe on the 23.6 GiB 4090. +serialization_batch_size = 8 +learning_rate = 5e-5 +epochs = 50 +train_ratio = 0.8 +val_ratio = 0.2 +tensorboard_log_dir = "/fmd_dinov3_siglip2" + +[inference] +checkpoint_path = "/best_model_fmd_latest.pth" + +[logging] +wandb_project = "material-classification" +wandb_run_name = "fmd-dinov3-siglip2-grounded" diff --git a/FMD/dinov3_siglip2_gated/head.json b/FMD/dinov3_siglip2_gated/head.json new file mode 100644 index 0000000000000000000000000000000000000000..486e733bf3193269e6e155bffdf0b0f639fa1039 --- /dev/null +++ b/FMD/dinov3_siglip2_gated/head.json @@ -0,0 +1,52 @@ +{ + "fusion": "gated", + "head": "Gated Multimodal Unit", + "head_kwargs": {}, + "vision_dim": 1024, + "language_dim": 768, + "num_classes": 10, + "classes": [ + "fabric", + "foliage", + "glass", + "leather", + "metal", + "paper", + "plastic", + "stone", + "water", + "wood" + ], + "dataset": "Flickr Material Database", + "dataset_key": "FMD", + "encoders": { + "vision": "DINOv3 ViT-L/16 (CLS token, frozen)", + "language": "SigLIP2 base text encoder over Qwen3-VL-8B captions (frozen)", + "short": "DINOv3-SigLIP2", + "slug": "dinov3_siglip2" + }, + "parameters": 1973002, + "training": { + "learning_rate": 5e-05, + "epochs": 50, + "batch_size": 8, + "weight_decay": 0.0001, + "lr_schedule": "constant", + "early_stopping_patience": 0, + "checkpoint": "best validation loss" + }, + "sha256": { + "safetensors": "4d1fdc321104c65bebbe8ff4e8d974afa7c011f4ffe03896bafe76435fcb3cd0", + "pth": "624738b583c897f37aba10e7aa3348e3dd3a3f3d6f0b2cd4484b3552857692b7" + }, + "source": { + "config": "config/fmd_config_latest_models.toml", + "git_commit": "1a8130c922267fb0786a33e3854a7e00763cc38f+dirty", + "checkpoint_mtime": "2026-09-26T16:10:36" + }, + "metrics": { + "mIoU": 0.9706892230576439, + "mAcc": 0.9849749373433584, + "eval_samples": 200 + } +} \ No newline at end of file diff --git a/FMD/dinov3_siglip2_gated/metrics.json b/FMD/dinov3_siglip2_gated/metrics.json new file mode 100644 index 0000000000000000000000000000000000000000..5aa6e7d196e81067af71341a3a9c5163f4768439 --- /dev/null +++ b/FMD/dinov3_siglip2_gated/metrics.json @@ -0,0 +1,61 @@ +{ + "dataset": "FMD", + "config": "config/fmd_config_latest_models.toml", + "checkpoint": "/best_model_fmd_latest.pth", + "fusion_type": "gated", + "num_eval_samples": 200, + "mIoU": 0.9706892230576439, + "mAcc": 0.9849749373433584, + "per_class": { + "fabric": { + "accuracy": 0.95, + "iou": 0.95, + "support": 20 + }, + "foliage": { + "accuracy": 1.0, + "iou": 1.0, + "support": 21 + }, + "glass": { + "accuracy": 0.9473684210526315, + "iou": 0.9473684210526315, + "support": 19 + }, + "leather": { + "accuracy": 1.0, + "iou": 1.0, + "support": 20 + }, + "metal": { + "accuracy": 1.0, + "iou": 0.9523809523809523, + "support": 20 + }, + "paper": { + "accuracy": 1.0, + "iou": 1.0, + "support": 20 + }, + "plastic": { + "accuracy": 1.0, + "iou": 0.9523809523809523, + "support": 20 + }, + "stone": { + "accuracy": 0.9523809523809523, + "iou": 0.9523809523809523, + "support": 21 + }, + "water": { + "accuracy": 1.0, + "iou": 1.0, + "support": 19 + }, + "wood": { + "accuracy": 1.0, + "iou": 0.9523809523809523, + "support": 20 + } + } +} \ No newline at end of file diff --git a/FMD/dinov3_siglip2_gated/model.pth b/FMD/dinov3_siglip2_gated/model.pth new file mode 100644 index 0000000000000000000000000000000000000000..9f0a1f6fe71a388b644ee69a2943f09d81053689 --- /dev/null +++ b/FMD/dinov3_siglip2_gated/model.pth @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:624738b583c897f37aba10e7aa3348e3dd3a3f3d6f0b2cd4484b3552857692b7 +size 7911137 diff --git a/FMD/dinov3_siglip2_gated/model.safetensors b/FMD/dinov3_siglip2_gated/model.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..d09975a66370cdd3c5d6d3aab2aa8155ecd7bf6b --- /dev/null +++ b/FMD/dinov3_siglip2_gated/model.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d1fdc321104c65bebbe8ff4e8d974afa7c011f4ffe03896bafe76435fcb3cd0 +size 7904432 diff --git a/FMD/dinov3_siglip2_gated/split.json b/FMD/dinov3_siglip2_gated/split.json new file mode 100644 index 0000000000000000000000000000000000000000..986c6131c08951d49771af6441182cf0b2749bb8 --- /dev/null +++ b/FMD/dinov3_siglip2_gated/split.json @@ -0,0 +1,209 @@ +{ + "val_groups": [ + "fabric_moderate_001_new", + "fabric_moderate_006_new", + "fabric_moderate_011_new", + "fabric_moderate_017_new", + "fabric_moderate_022_new", + "fabric_moderate_028_new", + "fabric_moderate_034_new", + "fabric_moderate_035_new", + "fabric_moderate_042_new", + "fabric_moderate_048_new", + "fabric_object_001_new", + "fabric_object_008_new", + "fabric_object_011_new", + "fabric_object_017_new", + "fabric_object_021_new", + "fabric_object_024_new", + "fabric_object_033_new", + "fabric_object_035_new", + "fabric_object_043_new", + "fabric_object_046_new", + "foliage_final_001_new", + "foliage_final_003_new", + "foliage_final_012_new", + "foliage_final_018_new", + "foliage_final_021_new", + "foliage_final_026_new", + "foliage_final_033_new", + "foliage_final_036_new", + "foliage_final_041_new", + "foliage_final_046_new", + "foliage_final_050_new", + "foliage_final_058_new", + "foliage_final_061_new", + "foliage_final_065_new", + "foliage_final_072_new", + "foliage_final_076_new", + "foliage_final_078_new", + "foliage_final_086_new", + "foliage_final_092_new", + "foliage_final_097_new", + "foliage_final_099_new", + "glass_moderate_008_new", + "glass_moderate_011_new", + "glass_moderate_017_new", + "glass_moderate_022_new", + "glass_moderate_027_new", + "glass_moderate_032_new", + "glass_moderate_037_new", + "glass_moderate_041_new", + "glass_moderate_046_new", + "glass_object_003_new", + "glass_object_006_new", + "glass_object_012_new", + "glass_object_016_new", + "glass_object_023_new", + "glass_object_026_new", + "glass_object_032_new", + "glass_object_034_new", + "glass_object_043_new", + "glass_object_045_new", + "leather_moderate_002_new", + "leather_moderate_006_new", + "leather_moderate_011_new", + "leather_moderate_017_new", + "leather_moderate_021_new", + "leather_moderate_028_new", + "leather_moderate_031_new", + "leather_moderate_036_new", + "leather_moderate_042_new", + "leather_moderate_047_new", + "leather_object_001_new", + "leather_object_006_new", + "leather_object_014_new", + "leather_object_019_new", + "leather_object_021_new", + "leather_object_026_new", + "leather_object_031_new", + "leather_object_036_new", + "leather_object_041_new", + "leather_object_046_new", + "metal_moderate_003_new", + "metal_moderate_005_new", + "metal_moderate_015_new", + "metal_moderate_017_new", + "metal_moderate_021_new", + "metal_moderate_022_new", + "metal_moderate_031_new", + "metal_moderate_038_new", + "metal_moderate_042_new", + "metal_moderate_049_new", + "metal_object_001_new", + "metal_object_009_new", + "metal_object_010_new", + "metal_object_017_new", + "metal_object_021_new", + "metal_object_027_new", + "metal_object_032_new", + "metal_object_037_new", + "metal_object_041_new", + "metal_object_046_new", + "paper_moderate_001_new", + "paper_moderate_006_new", + "paper_moderate_011_new", + "paper_moderate_016_new", + "paper_moderate_021_new", + "paper_moderate_026_new", + "paper_moderate_033_new", + "paper_moderate_036_new", + "paper_moderate_043_new", + "paper_moderate_046_new", + "paper_moderate_048_new", + "paper_object_007_new", + "paper_object_009_new", + "paper_object_016_new", + "paper_object_021_new", + "paper_object_029_new", + "paper_object_032_new", + "paper_object_037_new", + "paper_object_042_new", + "paper_object_044_new", + "plastic_moderate_002_new", + "plastic_moderate_006_new", + "plastic_moderate_010_new", + "plastic_moderate_016_new", + "plastic_moderate_022_new", + "plastic_moderate_027_new", + "plastic_moderate_032_new", + "plastic_moderate_034_new", + "plastic_moderate_041_new", + "plastic_moderate_044_new", + "plastic_moderate_050_new", + "plastic_object_006_new", + "plastic_object_010_new", + "plastic_object_015_new", + "plastic_object_016_new", + "plastic_object_027_new", + "plastic_object_033_new", + "plastic_object_036_new", + "plastic_object_042_new", + "plastic_object_046_new", + "stone_moderate_001_new", + "stone_moderate_005_new", + "stone_moderate_012_new", + "stone_moderate_014_new", + "stone_moderate_022_new", + "stone_moderate_028_new", + "stone_moderate_031_new", + "stone_moderate_033_new", + "stone_moderate_040_new", + "stone_moderate_046_new", + "stone_object_002_new", + "stone_object_003_new", + "stone_object_013_new", + "stone_object_016_new", + "stone_object_018_new", + "stone_object_025_new", + "stone_object_032_new", + "stone_object_034_new", + "stone_object_040_new", + "stone_object_045_new", + "stone_object_047_new", + "water_moderate_003_new", + "water_moderate_013_new", + "water_moderate_015_new", + "water_moderate_018_new", + "water_moderate_026_new", + "water_moderate_030_new", + "water_moderate_034_new", + "water_moderate_042_new", + "water_moderate_047_new", + "water_object_001_new", + "water_object_007_new", + "water_object_012_new", + "water_object_017_new", + "water_object_022_new", + "water_object_026_new", + "water_object_031_new", + "water_object_037_new", + "water_object_047_new", + "water_object_048_new", + "wood_moderate_001_new", + "wood_moderate_006_new", + "wood_moderate_011_new", + "wood_moderate_015_new", + "wood_moderate_021_new", + "wood_moderate_029_new", + "wood_moderate_033_new", + "wood_moderate_035_new", + "wood_moderate_042_new", + "wood_moderate_047_new", + "wood_object_001_new", + "wood_object_003_new", + "wood_object_011_new", + "wood_object_019_new", + "wood_object_022_new", + "wood_object_026_new", + "wood_object_032_new", + "wood_object_036_new", + "wood_object_038_new", + "wood_object_047_new" + ], + "seed": 42, + "val_ratio": 0.2, + "fusion_type": "gated", + "loss_type": "sce", + "split": "stratified_group" +} \ No newline at end of file diff --git a/FMD/dinov3_siglip2_lmf/README.md b/FMD/dinov3_siglip2_lmf/README.md new file mode 100644 index 0000000000000000000000000000000000000000..0dd66523d52f42e8df0b060adf9f3138b071f4cd --- /dev/null +++ b/FMD/dinov3_siglip2_lmf/README.md @@ -0,0 +1,52 @@ +# DINOv3-SigLIP2 + Low-rank Multimodal Fusion on Flickr Material Database + +A material-classification **fusion head** from SegObjectMaterial. It classifies the +material of a masked object from two frozen embeddings: + +| | | +|---|---| +| vision | DINOv3 ViT-L/16 (CLS token, frozen) -> 1024-d | +| language | SigLIP2 base text encoder over Qwen3-VL-8B captions (frozen) -> 768-d | +| head | Low-rank Multimodal Fusion (`lmf`, rank=4, hidden_dim=256, modality_dropout=0.0), 1,910,286 parameters | +| classes | 10 (Flickr Material Database) | + +**This repo holds only the head.** Features must come from the same encoders, +captioner and prompts as training (see the SegObjectMaterial repository); the +encoders are downloaded from their own model pages under their own licenses. + +## Evaluation + +Held-out split recorded in `split.json` (source images never seen in training). +Single training run -- differences under ~0.5 mIoU points between heads are within +run-to-run noise. + +| mIoU | mAcc | eval samples | +|---|---|---| +| 0.9805 | 0.9900 | 200 | + +## Training + +```json +{ + "learning_rate": 5e-05, + "epochs": 50, + "batch_size": 8, + "weight_decay": 0.0001, + "lr_schedule": "constant", + "early_stopping_patience": 0, + "checkpoint": "best validation loss" +} +``` + +## Use + +```python +from utils.hub import load_head_from_hub # SegObjectMaterial repository +head, info = load_head_from_hub("s0um0r0y/SegObjectMaterial", "FMD/dinov3_siglip2_lmf") +logits = head(vision_features, language_features) # [B, 1024], [B, 768] +``` + +## Integrity + +- `model.safetensors` sha256 `8b971bea6666ea946d0cd6c49e1115d5a36626163f07f70d0d6be7e421150ed8` +- source config `config/fmd_config_latest_models_lmf.toml`, code commit `1a8130c922267fb0786a33e3854a7e00763cc38f+dirty` diff --git a/FMD/dinov3_siglip2_lmf/config.toml b/FMD/dinov3_siglip2_lmf/config.toml new file mode 100644 index 0000000000000000000000000000000000000000..55193369daf9f7e9c346ba646a747eb341aed260 --- /dev/null +++ b/FMD/dinov3_siglip2_lmf/config.toml @@ -0,0 +1,65 @@ +# LMF-head twin of config/fmd_config_latest_models.toml. +# SAME embedding cache -- the head type does not change the cached features, so +# nothing needs re-serializing. Only the checkpoint, TensorBoard dir and W&B run +# differ, so this run can never overwrite the gated or mlp checkpoints. + +# FMD (Flickr Material Database) -- LATEST-MODELS pipeline: +# DINOv3 ViT-L/16 -> 1024-d vision +# Qwen3-VL -> SigLIP2 -> 768-d language +# +# Pair this with: +# run_serialization_FMD_latest_models.py +# -> train_latest_models.py --config config/fmd_config_latest_models.toml +# +# The dims below MUST match those streams. config/fmd_config.toml is the BASE +# (DINOv2 768 + CLIP 768) equivalent; the two caches are NOT interchangeable, +# which is why they live in separate directories. +# +# FMD is one object per image, so connected-component splitting does not apply. + +[data] +dataset_type = "FMD" +image_dir = "/image" +mask_dir = "/mask" +tensor_cache_dir = "/fmd_cache_dir_latest_models" + +[model] +# fusion head: "lmf" = low-rank multimodal fusion (src/fusion_classifier.py, +# LowRankFusionHead). Read by train_latest_models.py; a contradicting --fusion +# flag is an error, so checkpoint_path can't hold the wrong head. +fusion = "lmf" +vision_dim = 1024 # DINOv3 ViT-L/16 CLS token +language_dim = 768 # SigLIP2 base text embedding +num_classes = 10 + +# LMF hyperparameters. rank 4 x hidden 256 = ~1.84M fusion parameters, close to +# the gated head (~1.97M), so gated-vs-lmf compares the fusion operator rather +# than model size. Both are read back from the checkpoint at load time, so +# evaluate/inference scripts need no extra flags. +lmf_rank = 4 +lmf_hidden = 256 +# Fraction of training samples with ONE stream zeroed (half vision, half +# language). 0.0 = plain LMF, as in the paper. Try 0.2 as a second run: it +# forces the head to work from either stream alone. +modality_dropout = 0.0 + +[training] +batch_size = 8 + +# Serialization is a different memory regime from training: it pushes full +# images through an 8B VLM, while [training].batch_size only moves cached +# vectors through a small MLP. Qwen3-VL-8B + DINOv3 ViT-L are both larger than +# the base pair, so keep this conservative. 8 measured safe on the 23.6 GiB 4090. +serialization_batch_size = 8 +learning_rate = 5e-5 +epochs = 50 +train_ratio = 0.8 +val_ratio = 0.2 +tensorboard_log_dir = "/fmd_dinov3_siglip2_lmf" + +[inference] +checkpoint_path = "/best_model_fmd_latest_lmf.pth" + +[logging] +wandb_project = "material-classification" +wandb_run_name = "fmd-dinov3-siglip2-lmf" diff --git a/FMD/dinov3_siglip2_lmf/head.json b/FMD/dinov3_siglip2_lmf/head.json new file mode 100644 index 0000000000000000000000000000000000000000..2fd35f1943285b3cd7484d91a7f19f791b7a5525 --- /dev/null +++ b/FMD/dinov3_siglip2_lmf/head.json @@ -0,0 +1,56 @@ +{ + "fusion": "lmf", + "head": "Low-rank Multimodal Fusion", + "head_kwargs": { + "rank": 4, + "hidden_dim": 256, + "modality_dropout": 0.0 + }, + "vision_dim": 1024, + "language_dim": 768, + "num_classes": 10, + "classes": [ + "fabric", + "foliage", + "glass", + "leather", + "metal", + "paper", + "plastic", + "stone", + "water", + "wood" + ], + "dataset": "Flickr Material Database", + "dataset_key": "FMD", + "encoders": { + "vision": "DINOv3 ViT-L/16 (CLS token, frozen)", + "language": "SigLIP2 base text encoder over Qwen3-VL-8B captions (frozen)", + "short": "DINOv3-SigLIP2", + "slug": "dinov3_siglip2" + }, + "parameters": 1910286, + "training": { + "learning_rate": 5e-05, + "epochs": 50, + "batch_size": 8, + "weight_decay": 0.0001, + "lr_schedule": "constant", + "early_stopping_patience": 0, + "checkpoint": "best validation loss" + }, + "sha256": { + "safetensors": "8b971bea6666ea946d0cd6c49e1115d5a36626163f07f70d0d6be7e421150ed8", + "pth": "8b6375b94b649244ae7dd4b097cdd23265b865bcd4b71df5fce00adfa9b259e2" + }, + "source": { + "config": "config/fmd_config_latest_models_lmf.toml", + "git_commit": "1a8130c922267fb0786a33e3854a7e00763cc38f+dirty", + "checkpoint_mtime": "2026-10-07T14:00:21" + }, + "metrics": { + "mIoU": 0.9804511278195488, + "mAcc": 0.9899749373433584, + "eval_samples": 200 + } +} \ No newline at end of file diff --git a/FMD/dinov3_siglip2_lmf/metrics.json b/FMD/dinov3_siglip2_lmf/metrics.json new file mode 100644 index 0000000000000000000000000000000000000000..a42eef56264fa060dfaab1dcc028e668bfa615f3 --- /dev/null +++ b/FMD/dinov3_siglip2_lmf/metrics.json @@ -0,0 +1,61 @@ +{ + "dataset": "FMD", + "config": "config/fmd_config_latest_models_lmf.toml", + "checkpoint": "/best_model_fmd_latest_lmf.pth", + "fusion_type": "lmf", + "num_eval_samples": 200, + "mIoU": 0.9804511278195488, + "mAcc": 0.9899749373433584, + "per_class": { + "fabric": { + "accuracy": 1.0, + "iou": 1.0, + "support": 20 + }, + "foliage": { + "accuracy": 1.0, + "iou": 1.0, + "support": 21 + }, + "glass": { + "accuracy": 0.9473684210526315, + "iou": 0.9473684210526315, + "support": 19 + }, + "leather": { + "accuracy": 1.0, + "iou": 1.0, + "support": 20 + }, + "metal": { + "accuracy": 1.0, + "iou": 0.9523809523809523, + "support": 20 + }, + "paper": { + "accuracy": 1.0, + "iou": 1.0, + "support": 20 + }, + "plastic": { + "accuracy": 1.0, + "iou": 1.0, + "support": 20 + }, + "stone": { + "accuracy": 0.9523809523809523, + "iou": 0.9523809523809523, + "support": 21 + }, + "water": { + "accuracy": 1.0, + "iou": 1.0, + "support": 19 + }, + "wood": { + "accuracy": 1.0, + "iou": 0.9523809523809523, + "support": 20 + } + } +} \ No newline at end of file diff --git a/FMD/dinov3_siglip2_lmf/model.pth b/FMD/dinov3_siglip2_lmf/model.pth new file mode 100644 index 0000000000000000000000000000000000000000..6fc6e7479298e1ceb44a9a2443887ee964719a23 --- /dev/null +++ b/FMD/dinov3_siglip2_lmf/model.pth @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b6375b94b649244ae7dd4b097cdd23265b865bcd4b71df5fce00adfa9b259e2 +size 7653160 diff --git a/FMD/dinov3_siglip2_lmf/model.safetensors b/FMD/dinov3_siglip2_lmf/model.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..cfdc0d50f13c46c9958e43ed2641bcdfb5cd8d18 --- /dev/null +++ b/FMD/dinov3_siglip2_lmf/model.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b971bea6666ea946d0cd6c49e1115d5a36626163f07f70d0d6be7e421150ed8 +size 7647096 diff --git a/FMD/dinov3_siglip2_lmf/split.json b/FMD/dinov3_siglip2_lmf/split.json new file mode 100644 index 0000000000000000000000000000000000000000..0b96b3a94122e885f93f2d92aaafe822e37b856a --- /dev/null +++ b/FMD/dinov3_siglip2_lmf/split.json @@ -0,0 +1,209 @@ +{ + "val_groups": [ + "fabric_moderate_001_new", + "fabric_moderate_006_new", + "fabric_moderate_011_new", + "fabric_moderate_017_new", + "fabric_moderate_022_new", + "fabric_moderate_028_new", + "fabric_moderate_034_new", + "fabric_moderate_035_new", + "fabric_moderate_042_new", + "fabric_moderate_048_new", + "fabric_object_001_new", + "fabric_object_008_new", + "fabric_object_011_new", + "fabric_object_017_new", + "fabric_object_021_new", + "fabric_object_024_new", + "fabric_object_033_new", + "fabric_object_035_new", + "fabric_object_043_new", + "fabric_object_046_new", + "foliage_final_001_new", + "foliage_final_003_new", + "foliage_final_012_new", + "foliage_final_018_new", + "foliage_final_021_new", + "foliage_final_026_new", + "foliage_final_033_new", + "foliage_final_036_new", + "foliage_final_041_new", + "foliage_final_046_new", + "foliage_final_050_new", + "foliage_final_058_new", + "foliage_final_061_new", + "foliage_final_065_new", + "foliage_final_072_new", + "foliage_final_076_new", + "foliage_final_078_new", + "foliage_final_086_new", + "foliage_final_092_new", + "foliage_final_097_new", + "foliage_final_099_new", + "glass_moderate_008_new", + "glass_moderate_011_new", + "glass_moderate_017_new", + "glass_moderate_022_new", + "glass_moderate_027_new", + "glass_moderate_032_new", + "glass_moderate_037_new", + "glass_moderate_041_new", + "glass_moderate_046_new", + "glass_object_003_new", + "glass_object_006_new", + "glass_object_012_new", + "glass_object_016_new", + "glass_object_023_new", + "glass_object_026_new", + "glass_object_032_new", + "glass_object_034_new", + "glass_object_043_new", + "glass_object_045_new", + "leather_moderate_002_new", + "leather_moderate_006_new", + "leather_moderate_011_new", + "leather_moderate_017_new", + "leather_moderate_021_new", + "leather_moderate_028_new", + "leather_moderate_031_new", + "leather_moderate_036_new", + "leather_moderate_042_new", + "leather_moderate_047_new", + "leather_object_001_new", + "leather_object_006_new", + "leather_object_014_new", + "leather_object_019_new", + "leather_object_021_new", + "leather_object_026_new", + "leather_object_031_new", + "leather_object_036_new", + "leather_object_041_new", + "leather_object_046_new", + "metal_moderate_003_new", + "metal_moderate_005_new", + "metal_moderate_015_new", + "metal_moderate_017_new", + "metal_moderate_021_new", + "metal_moderate_022_new", + "metal_moderate_031_new", + "metal_moderate_038_new", + "metal_moderate_042_new", + "metal_moderate_049_new", + "metal_object_001_new", + "metal_object_009_new", + "metal_object_010_new", + "metal_object_017_new", + "metal_object_021_new", + "metal_object_027_new", + "metal_object_032_new", + "metal_object_037_new", + "metal_object_041_new", + "metal_object_046_new", + "paper_moderate_001_new", + "paper_moderate_006_new", + "paper_moderate_011_new", + "paper_moderate_016_new", + "paper_moderate_021_new", + "paper_moderate_026_new", + "paper_moderate_033_new", + "paper_moderate_036_new", + "paper_moderate_043_new", + "paper_moderate_046_new", + "paper_moderate_048_new", + "paper_object_007_new", + "paper_object_009_new", + "paper_object_016_new", + "paper_object_021_new", + "paper_object_029_new", + "paper_object_032_new", + "paper_object_037_new", + "paper_object_042_new", + "paper_object_044_new", + "plastic_moderate_002_new", + "plastic_moderate_006_new", + "plastic_moderate_010_new", + "plastic_moderate_016_new", + "plastic_moderate_022_new", + "plastic_moderate_027_new", + "plastic_moderate_032_new", + "plastic_moderate_034_new", + "plastic_moderate_041_new", + "plastic_moderate_044_new", + "plastic_moderate_050_new", + "plastic_object_006_new", + "plastic_object_010_new", + "plastic_object_015_new", + "plastic_object_016_new", + "plastic_object_027_new", + "plastic_object_033_new", + "plastic_object_036_new", + "plastic_object_042_new", + "plastic_object_046_new", + "stone_moderate_001_new", + "stone_moderate_005_new", + "stone_moderate_012_new", + "stone_moderate_014_new", + "stone_moderate_022_new", + "stone_moderate_028_new", + "stone_moderate_031_new", + "stone_moderate_033_new", + "stone_moderate_040_new", + "stone_moderate_046_new", + "stone_object_002_new", + "stone_object_003_new", + "stone_object_013_new", + "stone_object_016_new", + "stone_object_018_new", + "stone_object_025_new", + "stone_object_032_new", + "stone_object_034_new", + "stone_object_040_new", + "stone_object_045_new", + "stone_object_047_new", + "water_moderate_003_new", + "water_moderate_013_new", + "water_moderate_015_new", + "water_moderate_018_new", + "water_moderate_026_new", + "water_moderate_030_new", + "water_moderate_034_new", + "water_moderate_042_new", + "water_moderate_047_new", + "water_object_001_new", + "water_object_007_new", + "water_object_012_new", + "water_object_017_new", + "water_object_022_new", + "water_object_026_new", + "water_object_031_new", + "water_object_037_new", + "water_object_047_new", + "water_object_048_new", + "wood_moderate_001_new", + "wood_moderate_006_new", + "wood_moderate_011_new", + "wood_moderate_015_new", + "wood_moderate_021_new", + "wood_moderate_029_new", + "wood_moderate_033_new", + "wood_moderate_035_new", + "wood_moderate_042_new", + "wood_moderate_047_new", + "wood_object_001_new", + "wood_object_003_new", + "wood_object_011_new", + "wood_object_019_new", + "wood_object_022_new", + "wood_object_026_new", + "wood_object_032_new", + "wood_object_036_new", + "wood_object_038_new", + "wood_object_047_new" + ], + "seed": 42, + "val_ratio": 0.2, + "fusion_type": "lmf", + "loss_type": "sce", + "split": "stratified_group" +} \ No newline at end of file diff --git a/FMD/dinov3_siglip2_mlp/README.md b/FMD/dinov3_siglip2_mlp/README.md new file mode 100644 index 0000000000000000000000000000000000000000..850a2bb07e4ba3f8ff1364bae8847f09bba65ba7 --- /dev/null +++ b/FMD/dinov3_siglip2_mlp/README.md @@ -0,0 +1,52 @@ +# DINOv3-SigLIP2 + Concat + MLP on Flickr Material Database + +A material-classification **fusion head** from SegObjectMaterial. It classifies the +material of a masked object from two frozen embeddings: + +| | | +|---|---| +| vision | DINOv3 ViT-L/16 (CLS token, frozen) -> 1024-d | +| language | SigLIP2 base text encoder over Qwen3-VL-8B captions (frozen) -> 768-d | +| head | Concat + MLP (`mlp`, defaults), 1,053,450 parameters | +| classes | 10 (Flickr Material Database) | + +**This repo holds only the head.** Features must come from the same encoders, +captioner and prompts as training (see the SegObjectMaterial repository); the +encoders are downloaded from their own model pages under their own licenses. + +## Evaluation + +Held-out split recorded in `split.json` (source images never seen in training). +Single training run -- differences under ~0.5 mIoU points between heads are within +run-to-run noise. + +| mIoU | mAcc | eval samples | +|---|---|---| +| 0.9519 | 0.9747 | 200 | + +## Training + +```json +{ + "learning_rate": 5e-05, + "epochs": 50, + "batch_size": 8, + "weight_decay": 0.0001, + "lr_schedule": "constant", + "early_stopping_patience": 0, + "checkpoint": "best validation loss" +} +``` + +## Use + +```python +from utils.hub import load_head_from_hub # SegObjectMaterial repository +head, info = load_head_from_hub("s0um0r0y/SegObjectMaterial", "FMD/dinov3_siglip2_mlp") +logits = head(vision_features, language_features) # [B, 1024], [B, 768] +``` + +## Integrity + +- `model.safetensors` sha256 `df2768a2dc7d4af61f8fcbcc38e6ddcccc0787f79c159b6a1885fa4bc87b93c1` +- source config `config/fmd_config_latest_models_mlp.toml`, code commit `1a8130c922267fb0786a33e3854a7e00763cc38f+dirty` diff --git a/FMD/dinov3_siglip2_mlp/config.toml b/FMD/dinov3_siglip2_mlp/config.toml new file mode 100644 index 0000000000000000000000000000000000000000..a9dc200c77409f3c82897886109b8310664a6e23 --- /dev/null +++ b/FMD/dinov3_siglip2_mlp/config.toml @@ -0,0 +1,52 @@ +# MLP-head twin of config/fmd_config_latest_models.toml. +# SAME embedding cache -- the head type does not change the cached features, so +# nothing needs re-serializing. Only the checkpoint, TensorBoard dir and W&B run +# differ, so this run can never overwrite the gated checkpoint. + +# FMD (Flickr Material Database) -- LATEST-MODELS pipeline: +# DINOv3 ViT-L/16 -> 1024-d vision +# Qwen3-VL -> SigLIP2 -> 768-d language +# +# Pair this with: +# run_serialization_FMD_latest_models.py +# -> train_latest_models.py --config config/fmd_config_latest_models.toml +# +# The dims below MUST match those streams. config/fmd_config.toml is the BASE +# (DINOv2 768 + CLIP 768) equivalent; the two caches are NOT interchangeable, +# which is why they live in separate directories. +# +# FMD is one object per image, so connected-component splitting does not apply. + +[data] +dataset_type = "FMD" +image_dir = "/image" +mask_dir = "/mask" +tensor_cache_dir = "/fmd_cache_dir_latest_models" + +[model] +# fusion head: "gated" (GMU) or "mlp" (concat+MLP). Read by train_latest_models.py; a contradicting --fusion flag is an error, so checkpoint_path can't hold the wrong head. +fusion = "mlp" +vision_dim = 1024 # DINOv3 ViT-L/16 CLS token +language_dim = 768 # SigLIP2 base text embedding +num_classes = 10 + +[training] +batch_size = 8 + +# Serialization is a different memory regime from training: it pushes full +# images through an 8B VLM, while [training].batch_size only moves cached +# vectors through a small MLP. Qwen3-VL-8B + DINOv3 ViT-L are both larger than +# the base pair, so keep this conservative. 8 measured safe on the 23.6 GiB 4090. +serialization_batch_size = 8 +learning_rate = 5e-5 +epochs = 50 +train_ratio = 0.8 +val_ratio = 0.2 +tensorboard_log_dir = "/fmd_dinov3_siglip2_mlp" + +[inference] +checkpoint_path = "/best_model_fmd_latest_mlp.pth" + +[logging] +wandb_project = "material-classification" +wandb_run_name = "fmd-dinov3-siglip2-mlp" diff --git a/FMD/dinov3_siglip2_mlp/head.json b/FMD/dinov3_siglip2_mlp/head.json new file mode 100644 index 0000000000000000000000000000000000000000..db43ce99f30218fc02f9c1efd4be53ebff9d4af9 --- /dev/null +++ b/FMD/dinov3_siglip2_mlp/head.json @@ -0,0 +1,52 @@ +{ + "fusion": "mlp", + "head": "Concat + MLP", + "head_kwargs": {}, + "vision_dim": 1024, + "language_dim": 768, + "num_classes": 10, + "classes": [ + "fabric", + "foliage", + "glass", + "leather", + "metal", + "paper", + "plastic", + "stone", + "water", + "wood" + ], + "dataset": "Flickr Material Database", + "dataset_key": "FMD", + "encoders": { + "vision": "DINOv3 ViT-L/16 (CLS token, frozen)", + "language": "SigLIP2 base text encoder over Qwen3-VL-8B captions (frozen)", + "short": "DINOv3-SigLIP2", + "slug": "dinov3_siglip2" + }, + "parameters": 1053450, + "training": { + "learning_rate": 5e-05, + "epochs": 50, + "batch_size": 8, + "weight_decay": 0.0001, + "lr_schedule": "constant", + "early_stopping_patience": 0, + "checkpoint": "best validation loss" + }, + "sha256": { + "safetensors": "df2768a2dc7d4af61f8fcbcc38e6ddcccc0787f79c159b6a1885fa4bc87b93c1", + "pth": "6cc685947b78dcfbfcaeab97ce104d4282208143724efe0652e714bc4104eeef" + }, + "source": { + "config": "config/fmd_config_latest_models_mlp.toml", + "git_commit": "1a8130c922267fb0786a33e3854a7e00763cc38f+dirty", + "checkpoint_mtime": "2026-10-05T16:03:48" + }, + "metrics": { + "mIoU": 0.9518614718614717, + "mAcc": 0.9747117794486215, + "eval_samples": 200 + } +} \ No newline at end of file diff --git a/FMD/dinov3_siglip2_mlp/metrics.json b/FMD/dinov3_siglip2_mlp/metrics.json new file mode 100644 index 0000000000000000000000000000000000000000..5245998160870fbd7b8a8bd587a0ece49b9ba7e7 --- /dev/null +++ b/FMD/dinov3_siglip2_mlp/metrics.json @@ -0,0 +1,61 @@ +{ + "dataset": "FMD", + "config": "config/fmd_config_latest_models_mlp.toml", + "checkpoint": "/best_model_fmd_latest_mlp.pth", + "fusion_type": "mlp", + "num_eval_samples": 200, + "mIoU": 0.9518614718614717, + "mAcc": 0.9747117794486215, + "per_class": { + "fabric": { + "accuracy": 0.95, + "iou": 0.95, + "support": 20 + }, + "foliage": { + "accuracy": 1.0, + "iou": 1.0, + "support": 21 + }, + "glass": { + "accuracy": 0.8947368421052632, + "iou": 0.85, + "support": 19 + }, + "leather": { + "accuracy": 1.0, + "iou": 1.0, + "support": 20 + }, + "metal": { + "accuracy": 0.95, + "iou": 0.9047619047619048, + "support": 20 + }, + "paper": { + "accuracy": 1.0, + "iou": 1.0, + "support": 20 + }, + "plastic": { + "accuracy": 1.0, + "iou": 0.9523809523809523, + "support": 20 + }, + "stone": { + "accuracy": 0.9523809523809523, + "iou": 0.9090909090909091, + "support": 21 + }, + "water": { + "accuracy": 1.0, + "iou": 1.0, + "support": 19 + }, + "wood": { + "accuracy": 1.0, + "iou": 0.9523809523809523, + "support": 20 + } + } +} \ No newline at end of file diff --git a/FMD/dinov3_siglip2_mlp/model.pth b/FMD/dinov3_siglip2_mlp/model.pth new file mode 100644 index 0000000000000000000000000000000000000000..25da1967e9ff81c660d8b38d9f4608269bafa0dc --- /dev/null +++ b/FMD/dinov3_siglip2_mlp/model.pth @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6cc685947b78dcfbfcaeab97ce104d4282208143724efe0652e714bc4104eeef +size 4225934 diff --git a/FMD/dinov3_siglip2_mlp/model.safetensors b/FMD/dinov3_siglip2_mlp/model.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..d5a4ac940baa7d14404408c35016d81d25c33d7a --- /dev/null +++ b/FMD/dinov3_siglip2_mlp/model.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df2768a2dc7d4af61f8fcbcc38e6ddcccc0787f79c159b6a1885fa4bc87b93c1 +size 4221232 diff --git a/FMD/dinov3_siglip2_mlp/split.json b/FMD/dinov3_siglip2_mlp/split.json new file mode 100644 index 0000000000000000000000000000000000000000..7e118a4137e87b24aafeb55317981780a9df78fc --- /dev/null +++ b/FMD/dinov3_siglip2_mlp/split.json @@ -0,0 +1,209 @@ +{ + "val_groups": [ + "fabric_moderate_001_new", + "fabric_moderate_006_new", + "fabric_moderate_011_new", + "fabric_moderate_017_new", + "fabric_moderate_022_new", + "fabric_moderate_028_new", + "fabric_moderate_034_new", + "fabric_moderate_035_new", + "fabric_moderate_042_new", + "fabric_moderate_048_new", + "fabric_object_001_new", + "fabric_object_008_new", + "fabric_object_011_new", + "fabric_object_017_new", + "fabric_object_021_new", + "fabric_object_024_new", + "fabric_object_033_new", + "fabric_object_035_new", + "fabric_object_043_new", + "fabric_object_046_new", + "foliage_final_001_new", + "foliage_final_003_new", + "foliage_final_012_new", + "foliage_final_018_new", + "foliage_final_021_new", + "foliage_final_026_new", + "foliage_final_033_new", + "foliage_final_036_new", + "foliage_final_041_new", + "foliage_final_046_new", + "foliage_final_050_new", + "foliage_final_058_new", + "foliage_final_061_new", + "foliage_final_065_new", + "foliage_final_072_new", + "foliage_final_076_new", + "foliage_final_078_new", + "foliage_final_086_new", + "foliage_final_092_new", + "foliage_final_097_new", + "foliage_final_099_new", + "glass_moderate_008_new", + "glass_moderate_011_new", + "glass_moderate_017_new", + "glass_moderate_022_new", + "glass_moderate_027_new", + "glass_moderate_032_new", + "glass_moderate_037_new", + "glass_moderate_041_new", + "glass_moderate_046_new", + "glass_object_003_new", + "glass_object_006_new", + "glass_object_012_new", + "glass_object_016_new", + "glass_object_023_new", + "glass_object_026_new", + "glass_object_032_new", + "glass_object_034_new", + "glass_object_043_new", + "glass_object_045_new", + "leather_moderate_002_new", + "leather_moderate_006_new", + "leather_moderate_011_new", + "leather_moderate_017_new", + "leather_moderate_021_new", + "leather_moderate_028_new", + "leather_moderate_031_new", + "leather_moderate_036_new", + "leather_moderate_042_new", + "leather_moderate_047_new", + "leather_object_001_new", + "leather_object_006_new", + "leather_object_014_new", + "leather_object_019_new", + "leather_object_021_new", + "leather_object_026_new", + "leather_object_031_new", + "leather_object_036_new", + "leather_object_041_new", + "leather_object_046_new", + "metal_moderate_003_new", + "metal_moderate_005_new", + "metal_moderate_015_new", + "metal_moderate_017_new", + "metal_moderate_021_new", + "metal_moderate_022_new", + "metal_moderate_031_new", + "metal_moderate_038_new", + "metal_moderate_042_new", + "metal_moderate_049_new", + "metal_object_001_new", + "metal_object_009_new", + "metal_object_010_new", + "metal_object_017_new", + "metal_object_021_new", + "metal_object_027_new", + "metal_object_032_new", + "metal_object_037_new", + "metal_object_041_new", + "metal_object_046_new", + "paper_moderate_001_new", + "paper_moderate_006_new", + "paper_moderate_011_new", + "paper_moderate_016_new", + "paper_moderate_021_new", + "paper_moderate_026_new", + "paper_moderate_033_new", + "paper_moderate_036_new", + "paper_moderate_043_new", + "paper_moderate_046_new", + "paper_moderate_048_new", + "paper_object_007_new", + "paper_object_009_new", + "paper_object_016_new", + "paper_object_021_new", + "paper_object_029_new", + "paper_object_032_new", + "paper_object_037_new", + "paper_object_042_new", + "paper_object_044_new", + "plastic_moderate_002_new", + "plastic_moderate_006_new", + "plastic_moderate_010_new", + "plastic_moderate_016_new", + "plastic_moderate_022_new", + "plastic_moderate_027_new", + "plastic_moderate_032_new", + "plastic_moderate_034_new", + "plastic_moderate_041_new", + "plastic_moderate_044_new", + "plastic_moderate_050_new", + "plastic_object_006_new", + "plastic_object_010_new", + "plastic_object_015_new", + "plastic_object_016_new", + "plastic_object_027_new", + "plastic_object_033_new", + "plastic_object_036_new", + "plastic_object_042_new", + "plastic_object_046_new", + "stone_moderate_001_new", + "stone_moderate_005_new", + "stone_moderate_012_new", + "stone_moderate_014_new", + "stone_moderate_022_new", + "stone_moderate_028_new", + "stone_moderate_031_new", + "stone_moderate_033_new", + "stone_moderate_040_new", + "stone_moderate_046_new", + "stone_object_002_new", + "stone_object_003_new", + "stone_object_013_new", + "stone_object_016_new", + "stone_object_018_new", + "stone_object_025_new", + "stone_object_032_new", + "stone_object_034_new", + "stone_object_040_new", + "stone_object_045_new", + "stone_object_047_new", + "water_moderate_003_new", + "water_moderate_013_new", + "water_moderate_015_new", + "water_moderate_018_new", + "water_moderate_026_new", + "water_moderate_030_new", + "water_moderate_034_new", + "water_moderate_042_new", + "water_moderate_047_new", + "water_object_001_new", + "water_object_007_new", + "water_object_012_new", + "water_object_017_new", + "water_object_022_new", + "water_object_026_new", + "water_object_031_new", + "water_object_037_new", + "water_object_047_new", + "water_object_048_new", + "wood_moderate_001_new", + "wood_moderate_006_new", + "wood_moderate_011_new", + "wood_moderate_015_new", + "wood_moderate_021_new", + "wood_moderate_029_new", + "wood_moderate_033_new", + "wood_moderate_035_new", + "wood_moderate_042_new", + "wood_moderate_047_new", + "wood_object_001_new", + "wood_object_003_new", + "wood_object_011_new", + "wood_object_019_new", + "wood_object_022_new", + "wood_object_026_new", + "wood_object_032_new", + "wood_object_036_new", + "wood_object_038_new", + "wood_object_047_new" + ], + "seed": 42, + "val_ratio": 0.2, + "fusion_type": "mlp", + "loss_type": "sce", + "split": "stratified_group" +} \ No newline at end of file diff --git a/README.md b/README.md index e5f99753cd5578d5f86c70bb7da94c52f8fe692b..e213edb21a7bb8619dea92ab9d40a93556af2099 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,31 @@ --- -license: cc-by-nc-4.0 +license: other +library_name: pytorch +tags: +- material-classification +- multimodal-fusion +- robotics --- + +# SegObjectMaterial fusion heads + +Trained heads that classify an object's material from frozen vision + language +embeddings. Each folder holds one head with its weights, training config, +held-out split, evaluation metrics and model card. + +| head | dataset | encoders | fusion | mIoU | mAcc | +|---|---|---|---|---|---| +| [`DMS/dinov2_clip_gated`](DMS/dinov2_clip_gated) | DMS | DINOv2-CLIP | Gated Multimodal Unit | 0.4543 | 0.6373 | +| [`DMS/dinov2_clip_mlp`](DMS/dinov2_clip_mlp) | DMS | DINOv2-CLIP | Concat + MLP | 0.4744 | 0.6672 | +| [`DMS/dinov3_siglip2_gated`](DMS/dinov3_siglip2_gated) | DMS | DINOv3-SigLIP2 | Gated Multimodal Unit | 0.4630 | 0.6386 | +| [`DMS/dinov3_siglip2_gated_reg`](DMS/dinov3_siglip2_gated_reg) | DMS | DINOv3-SigLIP2 | Gated Multimodal Unit | 0.4606 | 0.6403 | +| [`DMS/dinov3_siglip2_lmf`](DMS/dinov3_siglip2_lmf) | DMS | DINOv3-SigLIP2 | Low-rank Multimodal Fusion | 0.4407 | 0.6181 | +| [`DMS/dinov3_siglip2_lmf_reg`](DMS/dinov3_siglip2_lmf_reg) | DMS | DINOv3-SigLIP2 | Low-rank Multimodal Fusion | 0.4453 | 0.6135 | +| [`DMS/dinov3_siglip2_mlp`](DMS/dinov3_siglip2_mlp) | DMS | DINOv3-SigLIP2 | Concat + MLP | 0.4592 | 0.6453 | +| [`FMD/dinov2_clip_gated`](FMD/dinov2_clip_gated) | FMD | DINOv2-CLIP | Gated Multimodal Unit | 0.9234 | 0.9599 | +| [`FMD/dinov2_clip_mlp`](FMD/dinov2_clip_mlp) | FMD | DINOv2-CLIP | Concat + MLP | 0.9612 | 0.9802 | +| [`FMD/dinov3_siglip2_gated`](FMD/dinov3_siglip2_gated) | FMD | DINOv3-SigLIP2 | Gated Multimodal Unit | 0.9707 | 0.9850 | +| [`FMD/dinov3_siglip2_lmf`](FMD/dinov3_siglip2_lmf) | FMD | DINOv3-SigLIP2 | Low-rank Multimodal Fusion | 0.9805 | 0.9900 | +| [`FMD/dinov3_siglip2_mlp`](FMD/dinov3_siglip2_mlp) | FMD | DINOv3-SigLIP2 | Concat + MLP | 0.9519 | 0.9747 | + +Every row is a single training run; see each folder's README for caveats.