text:
Roads Minister brings gifts of tar and cement
May 9, 2018 Mike Hast Latest News No comments
Duplication: Committee for Greater Frankston CEO Ginevra Hosking, left, Carrum MP Sonya Kilkenny, Roads Minister Luke Donnellan and Committee for Greater Frankston vice-president Chris Richards with Lathams Road in the background looking east.
ROADS Minister Luke Donnellan was at Carrum Downs Industrial Estate on Thursday 3 May to provide detail about duplication of Lathams Road.
The $80 million plus project announced in the state budget two days earlier will see the industrial estate's main road converted from two to four lanes for 2.5 kilometres between Frankston–Dandenong Road and Oliphant Way. The work will include a second bridge over Peninsula Link parallel to the existing bridge, creating two lanes in each direction.
The Carrum Downs project is part of the state government's Suburban Roads Upgrade, $2.2 billion to improve arterial roads in the southeast including in Cranbourne, Dandenong South and Pakenham as well as five roads in the northern suburbs.
Mr Donnellan said expressions of interest would be sought mid-year, contractors appointed in early 2019 and completion in 2020.
"The $2.2 billion package is about boosting local economies by building a more efficient road network," he said.
"Productivity in the industrial estate could be lifted 20 per cent after duplication."
Ginevra Hosking, CEO of advocacy group Committee for Greater Frankston, said the project would "provide a massive boost to productivity by reducing traffic congestion and increasing access at peak times".
"The industrial estate is one of our region's economic success stories. It generates $2.85 billion a year and employs almost 6000 people. Job growth in the precinct has risen 6.5 per cent each year, 13 times greater than the south eastern region's half a per cent."
She said traffic congestion on Lathams Road and surrounding streets had hampered the growth of industrial estate businesses in recent years.
Mr Donnellan acknowledged the role of Carrum MP Sonya Kilkenny in advocating for the project as well as the work of Committee for Greater Frankston.
Ms Kilkenny said the committee had "made it easier for me to push the project". She said making industrial estate businesses more efficient would create more jobs. "Businesses here have created an economic powerhouse for the region."
VicRoads' director of metro projects east Brendan Pauwels said the project would include four lanes, the new bridge, a shared path, traffic lights at Stephenson Rd, Frankston Gardens Drive and Colemans Road, and two lanes each way on and off EastLink (Rutherford Road).
* Mike Hast is a freelance writer for the Committee for Greater Frankston
First published in the Chelsea Mordialloc Mentone News – 9 May 2018
Job growth to stall as industrial land r...
Council responds to 'fire hazard' concer...
Crime rate highest in a decade...


Come join us for a Back to School Barbeque on Thursday August 30th from 5:00-6:00 pm. Following the barbeque come visit your school and teachers at Open House from 6:00--7:00 pm. We look forward to seeing you all there.


text:
Tag Archives: Jared Leto
Blade Runner 2049 Official Trailer Released!
Ana de Armas, Blade Runner, Blade Runner 2049, Blade Runner 2049 official trailer, Blade Runner 2049 Official Trailer Released!, Blade Runner sequel, Carla Juri, Dave Bautista, Denis Villeneuve, Harrison Ford, Jared Leto, Lennie James, Mackenzie Davis, Philip K Dick, Ridley Scott, Robin Wright, Ryan Gosling, Sylvia Hoeks
Warner Bros have released the full official trailer for Blade Runner 2049, the Blade Runner sequel is set 30 years after the first film and judging from this first full trailer the movie looks amazing.
Blade Runner 2049, starring Ryan Gosling, Harrison Ford, Ana de Armas, Sylvia Hoeks, Robin Wright, Mackenzie Davis, Carla Juri, Lennie James, with Dave Bautista and Jared Leto
Blade Runner 2049 in theaters October 6 2017
Blade Runner 2049 Announcement Trailer Released!
Ana de Armas, Blade Runner, Blade Runner 2049, Blade Runner 2049 Announcement Trailer, Blade Runner sequel, Carla Juri, Dave Bautista, Denis Villeneuve, Harrison Ford, Jared Leto, Lennie James, Mackenzie Davis, Philip K Dick, Ridley Scott, Robin Wright, Ryan Gosling, Sylvia Hoeks
Warner Bros. have just delivered our first look the Blade Runner sequel with this announcement trailer. Entitled, Blade Runner 2049, the film is set 30 years later and it looks like a very different place now…
New Suicide Squad Blitz Trailer!
Batman, Ben Affleck, David Ayer, Harley Quinn, Jared Leto, Margot Robbie, New Suicide Squad Trailer, Suicide Squad, Suicide Squad Movie, The Joker, Warner Bros
Check out the brilliant new Blitz trailer for David Ayer's Suicide Squad!
This film looks brilliant, can't wait!
SUICIDE SQUAD arrives in theaters August 5th.
Suicide Squad Official Trailer!
Batman, Ben Affleck, Bruce Wayne, David Ayer, DC Comics, Harley Quinn, Jared Leto, Margot Robbie, New Suicide Squad Trailer, Suicide Squad, Suicide Squad Movie, The Joker, Warner Bros
New Suicide Squad Official Trailer
Check out the awesome official trailer for David Ayer's Suicide Squad!
Warner Bros Pictures have also released a new Suicide Squad poster!
Suicide Squad' Comic-Con Trailer Officially Released
Adewale Akinnuoye-Agbaje, Amanda Walker, Captain Boomerang, Cara Delevingne, David Ayer, DC Comics, Deadshot, Dr. Hugo Strange, Enchantress, Harley Quinn, Ike Barinholtz, Jai Courtney, Jared Leto, Killer Croc, Margot Robbie, Suicide Squad, The Joker, Viola Davis, Will Smith
Warner Bros. have now released the official version of the new teaser trailer for David Ayer's Suicide Squad. Check it out!

redpajama_set_name: RedPajamaCommonCrawl


text:
require 'spec_helper'

class User
  include Recommendable
end

class Movie; end

describe Recommendable do
  it 'defines a list of recommendables' do
    expect(User._recommendables).to eq({})
  end

  describe '.recommended' do
    before { User.recommended(:movies) }

    it 'raises a NameError if the recommendable has no associated class' do
      expect { User.recommended(:books) }.to raise_error
    end

    it 'creates an Association for the recommended class' do
      expect(User._recommendables[:movies]).to be_instance_of(
        Recommendable::Association
      )
    end

    it 'allows accesing an association' do
      expect(User.reflect_on_recommendable(:movies)).to eq(
        User._recommendables[:movies]
      )
    end
  end

  after do
    User._recommendables.clear
  end
end

redpajama_set_name: RedPajamaGithub


Axis is an advisory firm that connects investors and corporations with tech startups. The event was part of a road show to investors, and one of many that Axis hosts in cities around the world. The company is based in Tel Aviv, and also operates in NYC.
Below I share highlights of each presenting company.
They redefine how data is stored and transferred in the cloud, to maximize security and throughput.
Eco-Fusion's app personalizes digital medicine to assist in preventing and managing chronic diseases.
They're developing the next generation of visual search for mobile and connected devices with advanced computer vision tech.
They are an antidote to our tendency to consult "Dr. Google" – Medivizor tailors personal health info and updates, based on the specific of each medical situation in an easily understandable and actionable way.
Optibus enables a better public transportation system through efficient and real-time scheduling and control. It dovetails nicely with trends like urbanization and self-driving vehicles.
Pocket Cause makes it easy to donate from your mobile device, and integrates with charitable websites. They are seeking to disrupt and improve the $26B online donation industry.
It's a global online platform where investors can access the securities of pre-IPO companies from employees, former employees, founders and other shareholders.
They have developed a field-proven Saas agronomic platform that mitigates agricultural risks and improves farmer profits while giving corporations, governments and FIs ways to track and benchmark remote growers.
Unsupervised machine learning tech that outwits the hackers and mimics an expert cybersecurity analyst. SecBI reduces breach response time and optimizes mitigation.
The Catholic Charities rang the opening bell; in a bit of gallows humor, one person wondered aloud whether last rites or a sermon might be more appropriate, given the concerns about the markets' continued reaction to the Brexit vote.


It's hard to say when the day starts if you never sleep through a night.
A day can start at 2pm. A day can start at 8pm.
No matter what the sun is doing.
It's hard to say when a life starts once you've climbed out of the rubble of your past life, still breathing.
Even if you did watch your dreams go up in flames.
Today I am feeling good. Like most words and emotional claims, I'm grading on a curve. Ten years ago, I might have called a day like this the worst day of my life.
Some days blink into such darkness that they can ignore the laws of the sun.
if you're playing by those rules.
if you're playing at all.
And you can start it whenever you want.
You don't have to wait for the little hand to finish its race, for the stars to go into hiding, or for the end of a sleep you could never seem to find.
You can just call it good enough.
You can just wish yourself good luck.
You can just tell yourself good morning.
And a better day could be yours, just like that.
Some days are inherently good.
Some days wink into such brilliance that the sun itself becomes a shadow.
May your life blink through enough days that you can see all the dreams of your past life still hanging on the stars.
May your day be so full of light you do not need the sun to tell you when your life begins.
Sweet and soulful. Thanks for this Ra.
Good becomes enough when you carry the sun inside you. You do.
That's a micro poem all on it's own. Matchbook poetry, here we come.
I just ordered my own paperback copy of Sack Nasty. I'm always rooting for you.
Sad and sweet and gorgeous. Good morning.
Not sure how relevant this song really is, but it does have the same title as this post.
Love you, Ra. You're like a pheonix, you manage to take what looks like complete destruction and turn it into something new and amazing.
Sad, and poignant, and just what I needed to read today. Oh, mornings.
Reblogged this on CRAPPY PERSONAL BLOG.


text:
National Audit Office: Collection of welfare information not well organized
National Audit Office logo. Source: National Audit Office
An audit of the National Audit Office has revealed that the collection of information in the course of local governments' social work and the administration and use of such information is not well organized and instead results in an excessive burden and the collected information not being used in the best way possible, spokespeople for the National Audit Office told BNS on Thursday.
The problem arises largely due to the state-developed STAR information system, which still has not begun working as intended a decade after its establishment.
When applying for social services and benefits, people are often asked to provide information that the local government could retrieve itself from the state's or its own databases, or information that doesn't hold much importance in the context of proceedings. The application forms of the audited governments — Tallinn, Pärnu and Jõhvi — included such data fields to the extent of approximately 20 percent.
The main reasons given for this by local governments are gaps and faults in the national social services and benefits data register (STAR), which the state has tried for years to implement as a social work tool for local governments. STAR obviously has to be fixed, but there are other options for retrieving information from the state's databases that can be used in the meantime. Contacting a person is only justified if all other reasonable means of collecting the data have been exhausted first.
Local governments' practices also differed, and there were examples of cases in which results were achieved without burdening people too much. For example, someone applying for subsistence benefits was faced with a form including 50 fields in Pärnu; the form used in Tallinn's Lasnamäe District, meanwhile, included just 17 fields.
The high number of different application forms is also a burden, as finding the correct one may not be easy. Few "universal" application forms exist, with which applicants could express their needs for several services and benefits at once.
Current services not fitting for e-state
Options for using e-channels to sort out welfare-related matters with local benefits are also poor. For example, obtaining the application form for a service or benefit online was often impossible, let alone filling it out and submitting it electronically. Services fitting of an e-state, which are partly or fully automated, tend to be exceptions in welfare organized by local governments.
The audit also revealed that the information collected from people is often duplicated, and that the same information is often held in several places (including paper files and information systems). Information with different content is also not kept in the same place. For instance, there are applications on file on paper, responses to information requests in STAR, and some calculations in Excel files.
Although a great deal of information is collected, it can be said that its value is largely unrealized: no in-depth analyses for identification of risks, assessments of the impact of measures and their correction are carried out. This is due in part to the abundance of paper in information management as well as the poor quality of the information entered in information systems.
The STAR information system developed by the state has not developed into a tool that supports local governments, the National Audit Office found. The system is necessary in principle, but STAR's frequent technical problems and issues in its operating logic have generated a lot of unreasonable work. The Ministry of Social Affairs has not managed to decisively solve these problems in the last ten years.
These issues with STAR in turn amplify many of the other aforementioned problems, such as people's burden in the submission of data and duplication of information. Things started moving in the right direction after STAR was delivered to the Social Insurance Board, but it still remains unclear whether and when local governments will find a solution to the issues raised.
The submission of data to the state is also a considerable burden for local governments. Data must regularly be entered into the STAR system and statistical reports submitted on an annual basis. Statistical reporting — 11 different reports in all — is a particularly large burden, and collecting the data needed for it may take days. Local governments themselves often don't use this data in this format either.
The National Audit Office also found that the burden of statistical reporting is not in reasonable balance with the actual need for the data. The examples of data use provided by the Ministry of Social Affairs do not convince the audit office that all of the data is consistently needed in as much detail as currently collected; it is often used just once, and loosely connected with the objective of collection.
The audit office made recommendations for local governments, the Ministry of Social Affairs and the Social Insurance Board for solving the problems highlighted by the audit.
national audit officebenefitsstarministry of social affairssocial insurance boardsocial work
Audit office rules impermissible gambling tax funds for LGBT+ groups
2020 brings wide range of social welfare changes
More than one fifth of Estonian population at risk of poverty in 2018
OECD report: Gender wage gap remains large in Estonia
Riigikogu adopts amendments to Income Tax Act


text:
DOJ Announces Arrests of 21 People in Alleged COVID-19 Fraud Schemes Totaling Nearly $150 Million
Image via Getty/Cheriss May/NurPhoto
Nearly two dozen people have been arrested for a series of COVID-related schemes that led to more than $149 million in losses.
The United States Justice Department announced the charges Wednesday, detailing a handful of cons allegedly carried out by the defendants. Officials say many of the suspects were medical field workers who "placed greed above care during an unprecedented public health emergency."
The DOJ claims some of the defendants were involved in selling falsified vaccination cards, misappropriating funds that were intended for frontline medical providers, and defrauding Medicare of hundreds of millions of dollars with bogus claims connected to COVID tests. One of the arrestees, who was identified as the Director of Pharmacy at a California hospital, allegedly used her resources to obtain vaccine lot numbers, which she used to falsify vaccination cards. Another defendant was charged with the distribution of fake vaccination records, and reportedly told an undercover federal agent, "until I get caught and go to jail, [expletive] it I'm taking the money, ha! I don't care."
According to authorities, some of the alleged fraudsters laundered their proceeds through U.S. shell corporations, transferred the funds to foreign banks, and then used the money to make extravagant purchases, including luxury goods and real estate.
"This COVID-19 health care fraud enforcement action involves extraordinary efforts to prosecute some of the largest and most wide-ranging pandemic frauds detected to date," Director for COVID-19 Fraud Enforcement Kevin Chambers said in a statement. "The scale and complexity of the schemes prosecuted today illustrates the success of our unprecedented interagency effort to quickly investigate and prosecute those who abuse our critical health care programs."
Members of Brooklyn's Woo Gang Charged With Stealing $4.3 Million in COVID-19 Relief Scam Case
Fugitive Couple Fled Prior to Sentencing in $21 Million COVID-19 Relief Scam Case
Florida Influencer Charged With Fraud for Stealing Massachusetts Resident's Identity to Apply for $100K COVID Loan
California Inmates Involved in $1 Billion COVID-19 Unemployment Benefits Fraud, According to Officials
The DOJ says the 21 individuals were arrested over the past week across eight states, including New York, California, New Jersey, Maryland, and Florida. A number of the defendants have pleaded guilty.
"Throughout the pandemic, we have seen trusted medical professionals orchestrate and carry out egregious crimes against their patients all for financial gain," said Luis Quesada, Assistant Director of the FBI's Criminal Investigative Division. "These health care fraud abuses erode the integrity and trust patients have with those in the health care industry, particularly during a vulnerable and worrisome time for many individuals. The actions of these criminals are unacceptable, and the FBI, working in coordination with our law enforcement partners, will continue to investigate and pursue those who exploit the integrity of the health care industry for profit."
The DOJ said its team has seized more than $8 million in fraud proceeds from the investigation.
NewsCrimeCourtMoneydojfraudMedicareCoronavirusCOVID-19Pandemic


text:
namespace media {

class MEDIA_EXPORT ADTSStreamParser : public MPEGAudioStreamParserBase {
 public:
  ADTSStreamParser();

  ADTSStreamParser(const ADTSStreamParser&) = delete;
  ADTSStreamParser& operator=(const ADTSStreamParser&) = delete;

  ~ADTSStreamParser() override;

  // MPEGAudioStreamParserBase overrides.
  int ParseFrameHeader(const uint8_t* data,
                       int size,
                       int* frame_size,
                       int* sample_rate,
                       ChannelLayout* channel_layout,
                       int* sample_count,
                       bool* metadata_frame,
                       std::vector<uint8_t>* extra_data) override;

 private:
  size_t adts_parse_error_limit_ = 0;
};

}  // namespace media

#endif  // MEDIA_FORMATS_MPEG_ADTS_STREAM_PARSER_H_


text:
// Metadata container

/**

moov
    mvhd
    trak
        tkhd
        mdia
            mdhd
            hdlr
            minf
                stbl
                    stsd
                    stts
                    stsc
                    stsz
                    stz2
                    stss
                    stco
                    co64

                    ctts
                    stsh
                    padb
                    stdp
                    sdtp
                    sbgp
                    sgpd
                    subs
                dinf
                    dref
                nmhd
                hmhd
                smhd
                vmhd
        tref
        edts
            elst
    mvex
        mehd
        trex
    ipmc

参考:
    http://blog.csdn.net/yu_yuan_1314/article/details/9078287
    http://www.cnblogs.com/tocy/p/media_container_3_mp4.html

在MOV和MP4文件格式中包括几个重要的Table,对应的atoms分别为:

    stts, ctts, stss, stsc, stsz, stco/co64

0. 节目时间计算(MVHD/MDHD)
    t = duration / timescale (MVHD/MDHD)

1. Sample时间表(stts)
    Time-To-Sample Atoms,存储了媒体sample的时常信息,提供了时间和相关sample之间的映射关系。
    该atom包含了一个表,关于time和sample号之间的索引关系。
    表的每个entry给出了具有相同时间间隔的连续的sample的个数和这些sample的时间间隔值。
    将这些时间间隔相加在一起,就可以得到一个完整的time与sample之间的映射。
    将所有的时间间隔相加在一起,就可以得到该track的时间总长。

    每个sample的显示时间可以通过如下的公式得到:
        D(n+1) = D(n) + STTS(n)
    其中,STTS(n)是sample n的时间间隔,包含在表格中;D(n)是sample n的显示时间。

2. 时间合成偏移表(ctts)
    Composition Offset Atom。每一个视频sample都有一个解码顺序和一个显示顺序。
    对于一个sample来说,解码顺序和显示顺序可能不一致,比如H.264格式,因此,
    Composition Offset Atom就是在这种情况下被使用的。
        (1)如果解码顺序和显示顺序是一致的,Composition Offset Atom就不会出现。
             Time-To-Sample Atoms既提供了解码顺序也提供了显示顺序,
             并能够计算出每个sample的开始时间和结束时间。
        (2)如果解码顺序和显示顺序不一致,那么Time-To-Sample Atoms既提供解码顺序,
            Composition Offset Atom则通过差值的形式来提供显示时间。

    Composition Offset Atom提供了一个从解码时间到显示时间的sample一对一的映射,具有如下的映射关系:
        CT(n) = DT(n) + CTTS(n)
    其中,CTTS(n)是sample n在table中的entry(这里假设一个entry只对应一个sample)可以是正值也可是负值;
    DT(n)是sample n的解码时间,通过Time-To-Sample Atoms计算获得;CT(n)便是sample n的显示时间。

3. 同步Sample表(stss)
    Sync Sample Atom,标识了媒体流中的关键帧,提供了随机访问点标记。
    Sync Sample Atom包含了一个table,table的每个entry标识了一个sample,该sample是媒体流的关键帧。
    Table中的sample号是严格按照增长的顺序排列的,如果该table不存在,那么每一个sample都可以作为随机访问点。
    换句话说,如果Sync Sample Atom不存在,那么所有的sample都是关键帧。

4. Chunk中的Sample信息表(stsc)
    Sample-To-Chunk Atom。为了优化数据访问,通常把sample封装到chunk中,
    一个chunk可能会包含一个或者几个sample。每个chunk会有不同的size,
    每个chunk中的sample也会有不同的size。
    在Sample-To-Chunk Atom中包含了个table,这个table提供了从sample到chunk的一个映射,
    每个table entry可能包含一个或者多个chunk。
    Table entry包含的内容包括第一个chunk号、每个chunk包含的sample的个数以及sample的描述ID。

5. Sample大小表(stsz)
    Sample Size Atom,指定了每个sample的size。Sample Size Atom给出了sample的总数和一张表,
    这个表包含了每个sample的size。如果指定了默认的sampe size,那么这个table就不存在了。
    即每个sample使用这个默认的sample size。

6. Chunk的偏移量表(stco/co64)
    Chunk Offset Atom,指定了每个chunk在文件中的位置。
    Chunk Offset Atom包含了一个table,表中的每个entry给出了每个chunk在文件中的位置。
    有两种形式来表示每个entry的值,即chunk的偏移量,32位和64位。
    如果Chunk Offset Atom的类型为stco,则使用的是32位的,
    如果是co64,那么使用的就是64位的。
**/

use std::string::String;
use std::mem;
use ::Matrix;
use super::{Mp4File, Kind, Header, Atom, Entry};

/**

Box Type : 'moov'
Container: File
Mandatory: Yes
Quantity : Exactly one

The metadata for a presentation is stored in the single Movie Box
which occurs at the top-level of a file. Normally this box is close
to the beginning or end of the file, though this is not required.

**/

#[derive(Debug, Clone)]
pub struct Moov {
    header: Header,
    children : Vec<Atom>

}

impl Moov {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        let children: Vec<Atom> = Atom::parse_children(f);
        Ok(Moov{
            header: header,
            children: children
        })
    }
}

/**

Box Type : 'mvhd'
Container: Movie Box ('moov')
Mandatory: Yes
Quantity : Exactly one

This box defines overall information which is media-independent,
and relevant to the entire presentation considered as a whole.

aligned(8) class MovieHeaderBox extends FullBox('mvhd', version, 0) {
    if (version==1) {
        unsigned int(64)  creation_time;
        unsigned int(64)  modification_time;
        unsigned int(32)  timescale;
        unsigned int(64)  duration;
    } else { // version==0
        unsigned int(32)  creation_time;
        unsigned int(32)  modification_time;
        unsigned int(32)  timescale;
        unsigned int(32)  duration;
    }
    template int(32) rate = 0x00010000; // typically 1.0
    template int(16) volume = 0x0100;   // typically, full volume
    const bit(16) reserved = 0;
    const unsigned int(32)[2] reserved = 0;
    // Unity matrix
    template int(32)[9] matrix = { 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 };
    bit(32)[6]  pre_defined = 0;
    unsigned int(32)  next_track_ID;
}

8.2.2.3 Semantics

`version` is an integer that specifies the version of this box (0 or 1 in this specification)
`creation_time` is an integer that declares the creation time of the
    presentation (in seconds since midnight, Jan. 1, 1904, in UTC time)
`modification_time` is an integer that declares the most recent time the
     presentation was modified (in seconds since midnight, Jan. 1, 1904, in UTC time)
`timescale` is an integer that specifies the time-scale for the entire presentation;
    this is the number of time units that pass in one second. For example,
    a time coordinate system that measures time in sixtieths of a second has a time scale of 60.
`duration` is an integer that declares length of the presentation (in the indicated timescale).
    This property is derived from the presentation's tracks:
    the value of this field corresponds to the duration of the longest track in
    the presentation. If the duration cannot be determined then duration is set
    to all 1s.
`rate` is a fixed point 16.16 number that indicates the preferred rate to play
    the presentation; 1.0 (0x00010000) is normal forward playback

`volume` is a fixed point 8.8 number that indicates the preferred playback volume.
    1.0 (0x0100) is full volume.
`matrix` provides a transformation matrix for the video; (u,v,w) are restricted here to (0,0,1),
    hex values (0,0,0x40000000).
`next_track_ID` is a non-zero integer that indicates a value to use for the track ID of
    the next track to be added to this presentation. Zero is not a valid track ID value.
    The value of next_track_ID shall be larger than the largest track-ID in use.
    If this value is equal to all 1s (32-bit maxint), and a new media track is to be added,
    then a search must be made in the file for an unused track identifier.
**/

#[derive(Debug, Clone)]
pub struct Mvhd {
    header: Header,
    creation_time: u64,
    modification_time: u64,
    timescale: u32,
    duration: u64,

    rate: f64,
    volume: f64,
    matrix: Matrix,
    next_track_id: u32
}

impl Mvhd {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        header.parse_version(f);
        header.parse_flags(f);

        let curr_offset = f.offset();

        let mut length = 0u64;

        let mut creation_time = 0u64;
        let mut modification_time = 0u64;
        let mut timescale = 0u32;
        let mut duration = 0u64;
        assert!(header.version.is_some());

        if header.version.unwrap() == 1u8 {
            creation_time = f.read_u64().unwrap();
            modification_time = f.read_u64().unwrap();
            timescale = f.read_u32().unwrap();
            duration = f.read_u64().unwrap();
            length += 28;
        } else {
            // header version == 0
            creation_time = f.read_u32().unwrap() as u64;
            modification_time = f.read_u32().unwrap() as u64;
            timescale = f.read_u32().unwrap();
            duration = f.read_u32().unwrap() as u64;
            length += 16;
        }
        // fixed point 16.16 number
        let rate = f.read_fixed_point(16, 16).unwrap(); // u32
        length += 4;

        // fixed point 8.8 number
        let volume = f.read_fixed_point(8, 8).unwrap(); // u16
        length += 2;

        // 10 Bytes reserved
        length += 10;

        f.seek(curr_offset+length);
        // matrix
        let matrix: Matrix = f.read_matrix().unwrap(); // 36 Bytes
        length += 36;

        // 24 Bytes
        length += 24;
        f.seek(curr_offset+length);

        let next_track_id = f.read_u32().unwrap();
        length += 4;

        f.offset_inc(length);

        Ok(Mvhd{
            header: header,
            creation_time: creation_time,
            modification_time: modification_time,
            timescale: timescale,
            duration: duration,

            rate: rate,
            volume: volume,
            matrix: matrix,
            next_track_id: next_track_id
        })
    }

}

/**

Box Type : 'trak'
Container: Movie Box ('moov')
Mandatory: Yes
Quantity : One or more

This is a container box for a single track of a presentation.
A presentation consists of one or more tracks.
Each track is independent of the other tracks in the presentation
and carries its own temporal and spatial information.
Each track will contain its associated Media Box.

Tracks are used for two purposes: (a) to contain media data (media tracks)
and (b) to contain packetization information for streaming protocols (hint tracks).

There shall be at least one media track within an ISO file,
and all the media tracks that contributed to the hint tracks shall remain in the file,
even if the media data within them is not referenced by the hint tracks;
after deleting all hint tracks, the entire un-hinted presentation shall remain.

8.3.1.2 Syntax

aligned(8) class TrackBox extends Box('trak') {

}

**/

#[derive(Debug, Clone)]
pub struct Trak {
    header: Header,
    children: Vec<Atom>
}

impl Trak {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        let children: Vec<Atom> = Atom::parse_children(f);
        Ok(Trak{
            header: header,
            children: children
        })
    }
}

/**
8.3.2.1

Box Type : 'tkhd'
Container: Track Box ('trak')
Mandatory: Yes
Quantity : Exactly one

This box specifies the characteristics of a single track. Exactly one
Track Header Box is contained in a track.

In the absence of an edit list, the presentation of a track starts
at the beginning of the overall presentation. An empty edit is used
to offset the start time of a track.

The default value of the track header flags for media tracks
is 7 (track_enabled, track_in_movie, track_in_preview).
If in a presentation all tracks have neither track_in_movie nor track_in_preview set,
then all tracks shall be treated as if both flags were set on all tracks.
Server hint tracks should have the `track_in_movie` and `track_in_preview` set to 0,
so that they are ignored for local playback and preview.

Under the 'iso3' brand or brands that share its requirements,
the width and height in the track header are measured on a notional 'square' (uniform) grid.
Track video data is normalized to these dimensions (logically) before any transformation
or placement caused by a layup or composition system. Track (and movie) matrices, if used,
also operate in this uniformly-scaled space.

8.3.2.2 Syntax

aligned(8) class TrackHeaderBox
extends FullBox('tkhd', version, flags){
    if (version==1) {
        unsigned int(64)  creation_time;
        unsigned int(64)  modification_time;
        unsigned int(32)  track_ID;
        const unsigned int(32)  reserved = 0;
        unsigned int(64)  duration;
    } else { // version==0
        unsigned int(32)  creation_time;
        unsigned int(32)  modification_time;
        unsigned int(32)  track_ID;
        const unsigned int(32)  reserved = 0;
        unsigned int(32)  duration;
    }
    const unsigned int(32)[2] reserved = 0;
    template int(16) layer = 0;
    template int(16) alternate_group = 0;
    template int(16) volume = {if track_is_audio 0x0100 else 0};
    const unsigned int(16) reserved = 0;
    // unity matrix
    template int(32)[9] matrix = { 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 };

    unsigned int(32) width;
    unsigned int(32) height;
}

8.3.2.3 Semantics

`version` is an integer that specifies the version of this box (0 or 1 in this specification)
`flags` is a 24-bit integer with flags; the following values are defined:
            Track_enabled: Indicates that the track is enabled.
                Flag value is 0x000001.
                A disabled track (the low bit is zero) is treated as if it were not present.
            Track_in_movie: Indicates that the track is used in the presentation.
                Flag value is 0x000002.
            Track_in_preview: Indicates that the track is used when previewing
                the presentation. Flag value is 0x000004.

`creation_time` is an integer that declares the creation time of
    this track (in seconds since midnight, Jan. 1, 1904, in UTC time)
`modification_time` is an integer that declares the most recent time
    the track was modified (in seconds since midnight, Jan. 1, 1904, in UTC time)
`track_ID` is an integer that uniquely identifies this track over
    the entire life-time of this presentation.
    Track IDs are never re-used and cannot be zero.
`duration` is an integer that indicates the duration of
    this track (in the timescale indicated in the Movie Header Box).
    The value of this field is equal to the sum of the durations
    of all of the track's edits. If there is no edit list,
    then the duration is the sum of the sample durations,
    converted into the timescale in the Movie Header Box.
    If the duration of this track cannot be determined then duration is set to all 1s.
`layer` specifies the front-to-back ordering of video tracks;
    tracks with lower numbers are closer to the viewer. 0 is the normal value,
    and -1 would be in front of track 0, and so on.
`alternate_group` is an integer that specifies a group or collection of tracks.
    If this field is 0 there is no information on possible relations to other tracks.
    If this field is not 0, it should be the same for tracks that contain alternate
    data for one another and different for tracks belonging to different such groups.
    Only one track within an alternate group should be played or streamed at any one time,
    and must be distinguishable from other tracks in the group via attributes such as bitrate,
    codec, language, packet size etc. A group may have only one member.
`volume` is a fixed 8.8 value specifying the track's relative audio volume.
    Full volume is 1.0 (0x0100) and is the normal value.
    Its value is irrelevant for a purely visual track.
    Tracks may be composed by combining them according to their volume,
    and then using the overall Movie Header Box volume setting;
    or more complex audio composition (e.g. MPEG-4 BIFS) may be used.
`matrix` provides a transformation matrix for the video; (u,v,w) are restricted here
    to (0,0,1), hex (0,0,0x40000000).
`width` and `height` specify the track's visual presentation size as fixed-point 16.16 values.
    These need not be the same as the pixel dimensions of the images,
    which is documented in the sample description(s);
    all images in the sequence are scaled to this size,
    before any overall transformation of the track represented by the matrix.
    The pixel dimensions of the images are the default values.
**/

#[derive(Debug, Clone)]
pub struct Tkhd {
    header: Header
    // creation_time: u64,
    // modification_time: u64,
    // track_id: u32,
    // duration: u64,

    // layer: i16,
    // alternate_group: i16,
    // // fixed 8.8 value
    // volume: f64, // {if track_is_audio 0x0100 else 0};

    // matrix: Matrix,
    // // fixed-point 16.16 values
    // width: f64,
    // height: f64
}

impl Tkhd {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        header.parse_version(f);
        header.parse_flags(f);

        let curr_offset = f.offset();
        f.seek(curr_offset+header.data_size);
        f.offset_inc(header.data_size);
        Ok(Tkhd{
            header: header
        })
    }
}

/**
Box Type : `tref`
Container: Track Box(`trak`)
Mandatory: No
Quantity : Zero or one

8.3.3.2 Syntax

aligned(8) class TrackReferenceBox extends Box('tref') {

}
aligned(8) class TrackReferenceTypeBox (unsigned int(32) reference_type) extends Box(reference_type) {
   unsigned int(32) track_IDs[];
}

8.3.3.3 Semantics

The Track Reference Box contains track reference type boxes.

`track_ID` is an integer that provides a reference from the containing track
    to another track in the presentation. track_IDs are never re-used and cannot be equal to zero.
The `reference_type` shall be set to one of the following values, or a value registered
    or from a derived specification or registration:
        *   `hint` the referenced track(s) contain the original media for this hint track
        *   `cdsc` this track describes the referenced track.
        *   `hind` this track depends on the referenced hint track, i.e.,
             it should only be used if the referenced hint track is used.
        *   `vdep` this track contains auxiliary depth video information for the referenced video track
        *   `vplx` this track contains auxiliary parallax video information for the referenced video track

**/

#[derive(Debug, Clone)]
pub struct Tref {
    header: Header
}

impl Tref {
    pub fn parse(f: &mut Mp4File, header: Header) -> Result<Self, &'static str>{
        let curr_offset = f.offset();
        f.seek(curr_offset+header.data_size);
        f.offset_inc(header.data_size);
        Ok(Tref{
            header: header
        })
    }
}

/**
Box Type : 'trgr'
Container: Track Box ('trak')
Mandatory: No
Quantity : Zero or one

**/

#[derive(Debug, Clone)]
pub struct Trgr {
    header: Header
}

impl Trgr {
    pub fn parse(f: &mut Mp4File, header: Header) -> Result<Self, &'static str>{
        let curr_offset = f.offset();
        f.seek(curr_offset+header.data_size);
        f.offset_inc(header.data_size);
        Ok(Trgr{
            header: header
        })
    }
}

/**
Box Type : `mdia`
Container: Track Box ('trak')
Mandatory: Yes
Quantity : Exactly One

**/

#[derive(Debug, Clone)]
pub struct Mdia {
    header: Header,
    children: Vec<Atom>
}

impl Mdia {
    pub fn parse(f: &mut Mp4File, header: Header) -> Result<Self, &'static str>{
        let children: Vec<Atom> = Atom::parse_children(f);
        Ok(Mdia{
            header: header,
            children: children
        })
    }
}

/**
Box Type : `mdhd`
Container: Media Box(`mdia`)
Mandatory: Yes
Quantity : Exactly one

8.4.2.2 Syntax
aligned(8) class MediaHeaderBox extends FullBox('mdhd', version, 0) {
    if (version==1) {
        unsigned int(64)  creation_time;
        unsigned int(64)  modification_time;
        unsigned int(32)  timescale;
        unsigned int(64)  duration;
    } else { // version==0
        unsigned int(32)  creation_time;
        unsigned int(32)  modification_time;
        unsigned int(32)  timescale;
        unsigned int(32)  duration;
    }
    bit(1) pad = 0;
    unsigned int(5)[3] language; // ISO-639-2/T language code
    unsigned int(16) pre_defined = 0;
}

**/

#[derive(Debug, Clone)]
pub struct Mdhd {
    header: Header,
    creation_time: u64,
    modification_time: u64,
    timescale: u32,
    duration: u64,

    language: String
}

impl Mdhd {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        header.parse_version(f);
        header.parse_flags(f);

        let curr_offset = f.offset();

        let mut length = 0u64;

        let mut creation_time = 0u64;
        let mut modification_time = 0u64;
        let mut timescale = 0u32;
        let mut duration = 0u64;
        assert!(header.version.is_some());

        if header.version.unwrap() == 1u8 {
            creation_time = f.read_u64().unwrap();
            modification_time = f.read_u64().unwrap();
            timescale = f.read_u32().unwrap();
            duration = f.read_u64().unwrap();
            length += 28;
        } else {
            // header version == 0
            creation_time = f.read_u32().unwrap() as u64;
            modification_time = f.read_u32().unwrap() as u64;
            timescale = f.read_u32().unwrap();
            duration = f.read_u32().unwrap() as u64;
            length += 16;
        }

        // 16 Bytes
        // pad: 1 Bit
        // language: 15 Bit;
        let language = f.read_iso639_code().unwrap(); // 2 Bytes, u16
        length += 2;

        // unsigned int(16) pre_defined = 0;
        length += 2;
        f.seek(curr_offset+length);
        f.offset_inc(length);

        Ok(Mdhd{
            header: header,
            creation_time: creation_time,
            modification_time: modification_time,
            timescale: timescale,
            duration: duration,
            language: language
        })
    }
}

/**
8.4.3.2 Syntax

aligned(8) class HandlerBox extends FullBox('hdlr', version = 0, 0) {
    unsigned int(32) pre_defined = 0;
    unsigned int(32) handler_type;
    const unsigned int(32)[3] reserved = 0;
    string   name;
}

8.4.3.3 Semantics

`version` is an integer that specifies the version of this box
`handler_type` when present in a media box, is an integer containing one of the following values,
    or a value from a derived specification:
        'vide' Video track
        'soun' Audio track
        'hint' Hint track
        'meta' Timed Metadata track
        'auxv' Auxiliary Video track

`handler_type` when present in a meta box, contains an appropriate value to
    indicate the format of the meta box contents. The value 'null' can be
    used in the primary meta box to indicate that it is merely being used to hold resources.
`name` is a null-terminated string in UTF-8 characters which gives a human-readable name
    for the track type (for debugging and inspection purposes).
**/

#[derive(Debug, Clone)]
pub struct Hdlr {
    header: Header,
    handler_type: String,
    name: String
}

impl Hdlr {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        header.parse_version(f);
        header.parse_flags(f);

        // let curr_offset = f.offset();
        // f.seek(curr_offset+header.data_size);

        let pre_defined = f.read_u32().unwrap();
        // u32 = [u8, u8, u8, u8]
        let handler_type_bytes: [u8; 4] = [
            f.read_u8().unwrap(), f.read_u8().unwrap(),
            f.read_u8().unwrap(), f.read_u8().unwrap()
        ];
        let handler_type = String::from_utf8(handler_type_bytes.to_vec()).unwrap();
        // reserved
        f.read_u32().unwrap();
        f.read_u32().unwrap();
        f.read_u32().unwrap();

        let name_length = header.data_size - 20;
        let mut name_bytes = Vec::new();
        for _ in 0..name_length {
            name_bytes.push(f.read_u8().unwrap());
        }
        let name = String::from_utf8(name_bytes).unwrap();

        f.offset_inc(header.data_size);
        Ok(Hdlr{
            header: header,
            handler_type: handler_type,
            name: name
        })
    }
}

#[derive(Debug, Clone)]
pub struct Minf {
    header: Header,
    children: Vec<Atom> // Box Types: 'vmhd', 'smhd', 'hmhd', 'nmhd'
}

impl Minf {
    pub fn parse(f: &mut Mp4File, header: Header) -> Result<Self, &'static str>{
        let children: Vec<Atom> = Atom::parse_children(f);
        Ok(Minf{
            header: header,
            children: children
        })
    }
}

#[derive(Debug, Clone)]
pub struct Vmhd {
    header: Header,
    graphicsmode: u16,
    opcolor: [u16; 3]
}

impl Vmhd {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        header.parse_version(f);
        header.parse_flags(f);

        let curr_offset = f.offset();

        let graphicsmode = f.read_u16().unwrap();
        // red, greenm blue
        let opcolor: [u16; 3] = [
            f.read_u16().unwrap(), f.read_u16().unwrap(),
            f.read_u16().unwrap()
        ];

        f.offset_inc(8);

        Ok(Vmhd{
            header: header,
            graphicsmode: graphicsmode,
            opcolor: opcolor
        })
    }
}

#[derive(Debug, Clone)]
pub struct Smhd {
    header: Header,
    balance: f64  // fixed-point 8.8 number
}

impl Smhd {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        header.parse_version(f);
        header.parse_flags(f);

        let curr_offset = f.offset();

        let balance = f.read_fixed_point(8, 8).unwrap(); // 2 Bytes
        // reserved
        f.read_u16().unwrap();

        f.offset_inc(4);

        Ok(Smhd{
            header: header,
            balance: balance
        })
    }
}

#[derive(Debug, Clone)]
pub struct Hmhd {
    header: Header,
    max_pdu_size: u16,
    avg_pdu_size: u16,
    max_bitrate : u32,
    avg_bitrate : u32
}

impl Hmhd {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        header.parse_version(f);
        header.parse_flags(f);

        let curr_offset = f.offset();

        let max_pdu_size = f.read_u16().unwrap();
        let avg_pdu_size = f.read_u16().unwrap();
        let max_bitrate = f.read_u32().unwrap();
        let avg_bitrate = f.read_u32().unwrap();
        // reserved
        f.read_u32().unwrap();

        f.offset_inc(16);

        Ok(Hmhd{
            header: header,
            max_pdu_size: max_pdu_size,
            avg_pdu_size: avg_pdu_size,
            max_bitrate: max_bitrate,
            avg_bitrate: avg_bitrate
        })
    }
}

#[derive(Debug, Clone)]
pub struct Nmhd {
    header: Header
}

impl Nmhd {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        header.parse_version(f);
        header.parse_flags(f);

        Ok(Nmhd{
            header: header
        })
    }
}

#[derive(Debug, Clone)]
pub struct Stbl {
    header: Header,
    children: Vec<Atom>
}

impl Stbl {
    pub fn parse(f: &mut Mp4File, header: Header) -> Result<Self, &'static str>{
        let children: Vec<Atom> = Atom::parse_children(f);
        Ok(Stbl{
            header: header,
            children: children
        })
    }
}

#[derive(Debug, Clone)]
pub struct Stsz {
    header: Header,
    sample_size: u32,
    sample_count: u32,
    entry_size: Option<Vec<u32>>
}

impl Stsz {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        header.parse_version(f);
        header.parse_flags(f);

        // let curr_offset = f.offset();
        // f.seek(curr_offset+header.data_size);
        let sample_size : u32 = f.read_u32().unwrap();
        let sample_count: u32 = f.read_u32().unwrap();
        let mut entry_size = None;

        if sample_size == 0u32 {
            let mut _entry_size: Vec<u32> = Vec::new();
            for _ in 0..sample_count {
                _entry_size.push(f.read_u32().unwrap());
            }
            entry_size = Some(_entry_size);
        }

        f.offset_inc(header.data_size);

        Ok(Stsz{
            header: header,
            sample_size: sample_size,
            sample_count: sample_count,
            entry_size: entry_size
        })
    }
}

/**
aligned(8) class CompactSampleSizeBox extends FullBox('stz2', version = 0, 0) {
    unsigned int(24) reserved = 0;
    unisgned int(8) field_size;
    unsigned int(32) sample_count;
    for (i=1; i <= sample_count; i++) {
        unsigned int(field_size)   entry_size;
    }
}

8.7.3.3.2 Semantics

`version` is an integer that specifies the version of this box
`field_size` is an integer specifying the size in bits of the entries in the following table;
    it shall take the value 4, 8 or 16.
    If the value 4 is used, then each byte contains two values: entry[i]<<4 + entry[i+1];
    if the sizes do not fill an integral number of bytes, the last byte is padded with zeros.
`sample_count` is an integer that gives the number of entries in the following table
`entry_size` is an integer specifying the size of a sample, indexed by its number.

**/

#[derive(Debug, Clone)]
pub struct Stz2 {
    header: Header,
    field_size: u8,
    sample_count: u32,
    entry_size: Vec<u32>
}

impl Stz2 {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        header.parse_version(f);
        header.parse_flags(f);
        // let curr_offset = f.offset();
        // f.seek(curr_offset+header.data_size);
        let _ = f.read_u32().unwrap();
        let field_size = f.read_u8().unwrap();
        let sample_count = f.read_u32().unwrap();
        // value 4, 8 or 16.
        assert!(field_size == 4u8 || field_size == 8u8 || field_size == 16u8);

        let mut entry_size: Vec<u32> = Vec::new();

        let mut next_val: Option<u32> = None;

        for _ in 0..sample_count {
            if field_size == 4u8 {
                if next_val.is_some() {
                    entry_size.push(next_val.unwrap());
                    next_val = None;
                } else {
                    let bits = format!("{:08b}", f.read_u8().unwrap());
                    entry_size.push(u32::from_str_radix(&bits[0..4], 2).unwrap());
                    next_val = Some(u32::from_str_radix(&bits[4..8], 2).unwrap());
                }
            } else if field_size == 8u8 {
                entry_size.push(f.read_u8().unwrap() as u32);
            } else if field_size == 16u8 {
                entry_size.push(f.read_u16().unwrap() as u32);
            } else {
                panic!("STZ2 parse error.");
            }
        }

        f.offset_inc(header.data_size);
        Ok(Stz2{
            header: header,
            field_size  : field_size,
            sample_count: sample_count,
            entry_size  : entry_size
        })
    }
}

/**

8.7.4.2 Syntax

aligned(8) class SampleToChunkBox extends FullBox('stsc', version = 0, 0) {
   unsigned int(32)  entry_count;
   for (i=1; i <= entry_count; i++) {
        unsigned int(32) first_chunk;
        unsigned int(32) samples_per_chunk; unsigned int(32) sample_description_index;
    }
}

8.7.4.3 Semantics
`version` is an integer that specifies the version of this box
`entry_count` is an integer that gives the number of entries in the following table
`first_chunk` is an integer that gives the index of the first chunk in this run of chunks
    that share the same samples-per-chunk and sample-description-index;
    the index of the first chunk in a track has the value 1 (the `first_chunk` field in the
    first record of this box has the value 1, identifying that the first sample maps to the first chunk).
`samples_per_chunk` is an integer that gives the number of samples in each of these chunks
    sample_description_index is an integer that gives the index of the sample entry
    that describes the samples in this chunk. The index ranges from 1 to the number
    of sample entries in the Sample Description Box

**/

#[derive(Debug, Clone)]
pub struct Stsc {
    header: Header,
    entry_count: u32,
    entries: Vec<Entry>
}

impl Stsc {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        header.parse_version(f);
        header.parse_flags(f);
        // let curr_offset = f.offset();
        // f.seek(curr_offset+header.data_size);

        let entry_count = f.read_u32().unwrap();
        let mut entries: Vec<Entry> = Vec::new();
        for _ in 0..entry_count {
            let entry = Entry {
                first_chunk: f.read_u32().unwrap(),
                samples_per_chunk: f.read_u32().unwrap(),
                sample_description_index: f.read_u32().unwrap(),
            };
            entries.push(entry);
        }

        f.offset_inc(header.data_size);
        Ok(Stsc{
            header     : header,
            entry_count: entry_count,
            entries    : entries
        })
    }
}

/**
8.7.5 Chunk Offset Box
8.7.5.1 Definition

Box Type : 'stco', 'co64'
Container: Sample Table Box ('stbl')
Mandatory: Yes
Quantity : Exactly one variant must be present

The chunk offset table gives the index of each chunk into the containing file.
There are two variants, permitting the use of 32-bit or 64-bit offsets.
The latter is useful when managing very large presentations. At most one of these
variants will occur in any single instance of a sample table.

Offsets are file offsets, not the offset into any box within the file (e.g. Media Data Box).
This permits referring to media data in files without any box structure. It does also mean
that care must be taken when constructing a self-contained ISO file with its metadata (Movie Box)
at the front, as the size of the Movie Box will affect the chunk offsets to the media data.

8.7.5.2 Syntax
aligned(8) class ChunkOffsetBox
   extends FullBox('stco', version = 0, 0) {
   unsigned int(32)  entry_count;
   for (i=1; i <= entry_count; i++) {
      unsigned int(32)  chunk_offset;
   }
}
aligned(8) class ChunkLargeOffsetBox
   extends FullBox('co64', version = 0, 0) {
   unsigned int(32)  entry_count;
   for (i=1; i <= entry_count; i++) {
      unsigned int(64)  chunk_offset;
   }
}

8.7.5.3 Semantics
`version` is an integer that specifies the version of this box
`entry_count` is an integer that gives the number of entries in the following table
`chunk_offset` is a 32 or 64 bit integer that gives the offset of the start
    of a chunk into its containing media file.

**/

#[derive(Debug, Clone)]
pub struct Stco {
    header: Header,
    entry_count: u32,
    chunks: Vec<u32>
}

impl Stco {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        header.parse_version(f);
        header.parse_flags(f);
        // let curr_offset = f.offset();
        // f.seek(curr_offset+header.data_size);

        let entry_count = f.read_u32().unwrap();
        let mut chunks: Vec<u32> = Vec::new();

        for _ in 0..entry_count {
            chunks.push(f.read_u32().unwrap());
        }

        f.offset_inc(header.data_size);
        Ok(Stco{
            header     : header,
            entry_count: entry_count,
            chunks     : chunks
        })
    }
}

#[derive(Debug, Clone)]
pub struct Co64 {
    header: Header,
    entry_count: u32,
    chunks: Vec<u64>
}

impl Co64 {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        header.parse_version(f);
        header.parse_flags(f);
        // let curr_offset = f.offset();
        // f.seek(curr_offset+header.data_size);

        let entry_count = f.read_u32().unwrap();
        let mut chunks: Vec<u64> = Vec::new();

        for _ in 0..entry_count {
            chunks.push(f.read_u64().unwrap());
        }

        f.offset_inc(header.data_size);
        Ok(Co64{
            header     : header,
            entry_count: entry_count,
            chunks     : chunks
        })
    }
}

/**
Box Type : `padb`
Container: Sample Table ('stbl')
Mandatory: No
Quantity : Zero or one

8.7.6.3 Semantics

In some streams the media samples do not occupy all bits of the bytes given by the sample size,
and are padded at the end to a byte boundary. In some cases, it is necessary to record
externally the number of padding bits used. This table supplies that information.

8.7.6.2 Syntax

aligned(8) class PaddingBitsBox extends FullBox('padb', version = 0, 0) {
    unsigned int(32) sample_count;
    int i;
    for (i=0; i < ((sample_count + 1)/2); i++) {
        bit(1)   reserved = 0;
        bit(3)   pad1;
        bit(1)   reserved = 0;
        bit(3)   pad2;
    }
}

`sample_count` – counts the number of samples in the track;
    it should match the count in other tables
`pad1` – a value from 0 to 7, indicating the number of
    bits at the end of sample (i*2)+1.
`pad2` – a value from 0 to 7, indicating the number of
    bits at the end of sample (i*2)+2

**/

#[derive(Debug, Clone)]
pub struct Padb {
    header: Header,
    sample_count: u32
}

impl Padb {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        header.parse_version(f);
        header.parse_flags(f);
        let curr_offset = f.offset();

        let sample_count = f.read_u32().unwrap();
        // f.offset_inc(4);
        // for i in 0..((sample_count+1)/2) {
        //     let bits = format!("{:08b}", f.read_u8().unwrap());
        //     let pad1 = u32::from_str_radix(&bits[1..4], 2).unwrap();
        //     let pad2 = u32::from_str_radix(&bits[5..8], 2).unwrap();
        // }

        f.seek(curr_offset+header.data_size);
        f.offset_inc(header.data_size);
        Ok(Padb{
            header      : header,
            sample_count: sample_count
        })
    }
}

#[derive(Debug, Clone)]
pub struct Stsd {
    header: Header
}

impl Stsd {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        header.parse_version(f);
        header.parse_flags(f);
        let curr_offset = f.offset();
        f.seek(curr_offset+header.data_size);
        f.offset_inc(header.data_size);
        Ok(Stsd{
            header: header
        })
    }
}

#[derive(Debug, Clone)]
pub struct Stdp {
    header: Header
}

impl Stdp {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        header.parse_version(f);
        header.parse_flags(f);
        let curr_offset = f.offset();
        f.seek(curr_offset+header.data_size);
        f.offset_inc(header.data_size);
        Ok(Stdp{
            header: header
        })
    }
}

/**

8.6.1.2
8.6.1.2.1 Decoding Time to Sample Box Definition
Box Type : `stts`
Container: Sample Table Box ('stbl')
Mandatory: Yes
Quantity : Exactly one

This box contains a compact version of a table that allows indexing from decoding time to sample number.
Other tables give sample sizes and pointers, from the sample number. Each entry in the table gives
the number of consecutive samples with the same time delta, and the delta of those samples.
By adding the deltas a complete time-to-sample map may be built.

The Decoding Time to Sample Box contains decode time delta's:
    DT(n+1) = DT(n) + STTS(n) where STTS(n) is the (uncompressed) table entry for sample n.

The sample entries are ordered by decoding time stamps; therefore the deltas are all non-negative.

The DT axis has a zero origin; DT(i) = SUM(for j=0 to i-1 of delta(j)),
and the sum of all deltas gives the length of the media in
the track (not mapped to the overall timescale, and not considering any edit list).

The Edit List Box provides the initial CT value if it is non-empty (non-zero).

8.6.1.2.2 Syntax

aligned(8) class TimeToSampleBox extends FullBox('stts', version = 0, 0) {
    unsigned int(32)  entry_count;
    int i;
    for (i=0; i < entry_count; i++) {
        unsigned int(32)  sample_count;
        unsigned int(32)  sample_delta;
    }
}

For example with Table 2, the entry would be:

+++++++++++++++++++++++++++++++
| Sample count | Sample-delta |
+++++++++++++++++++++++++++++++
|     14       |      10      |
+++++++++++++++++++++++++++++++

8.6.1.2.3 Semantics

`version` - is an integer that specifies the version of this box.
`entry_count` - is an integer that gives the number of entries in the following table.
`sample_count` - is an integer that counts the number of consecutive samples that have the given
duration.
`sample_delta` - is an integer that gives the delta of these samples in the time-scale of the media.

**/

#[derive(Debug, Clone)]
pub struct STTS_Entry {
    sample_count: u32,
    sample_delta: u32
}

#[derive(Debug, Clone)]
pub struct Stts {
    header: Header,
    entry_count: u32,
    entries: Vec<STTS_Entry>
}

impl Stts {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        header.parse_version(f);
        header.parse_flags(f);
        // let curr_offset = f.offset();
        // f.seek(curr_offset+header.data_size);
        let entry_count = f.read_u32().unwrap();
        let mut entries = Vec::new();

        for _ in 0..entry_count {
            let sample_count: u32 = f.read_u32().unwrap();
            let sample_delta: u32 = f.read_u32().unwrap();
            entries.push(STTS_Entry{
                sample_count: sample_count,
                sample_delta: sample_delta
            });
        }

        f.offset_inc(header.data_size);
        Ok(Stts{
            header: header,
            entry_count: entry_count,
            entries: entries
        })
    }
}

/**
8.6.1.3
8.6.1.3.1 Composition Time to Sample Box Definition
Box Type : `ctts`
Container: Sample Table Box ('stbl')
Mandatory: No
Quantity : Zero or one

This box provides the offset between decoding time and composition time.

In version 0 of this box the decoding time must be less than the composition time,
and the offsets are expressed as unsigned numbers such that CT(n) = DT(n) + CTTS(n)
where CTTS(n) is the (uncompressed) table entry for sample n.

In version 1 of this box, the composition timeline and the decoding timeline are
still derived from each other, but the offsets are signed.
It is recommended that for the computed composition timestamps,
there is exactly one with the value 0 (zero).

For either version of the box, each sample must have a unique composition timestamp value,
that is, the timestamp for two samples shall never be the same.

It may be true that there is no frame to compose at time 0; the handling of
this is unspecified (systems might display the first frame for longer, or a suitable fill colour).

When version 1 of this box is used, the CompositionToDecodeBox may also be present in
the sample table to relate the composition and decoding timelines.
When backwards-compatibility or compatibility with an unknown set
of readers is desired, version 0 of this box should be used when possible.
In either version of this box, but particularly under version 0,
if it is desired that the media start at track time 0, and the first media
sample does not have a composition time of 0, an edit list may be used to 'shift' the media to time 0.

The composition time to sample table is optional and must only be present
if DT and CT differ for any samples.

Hint tracks do not use this box.

For example in Table 2

+++++++++++++++++++++++++++++++
| Sample count | Sample_offset|
+++++++++++++++++++++++++++++++
|      1       |      10      |
-------------------------------
|      1       |      30      |
-------------------------------
|      2       |       0      |
-------------------------------
|      1       |      30      |
-------------------------------
|      2       |       0      |
-------------------------------
|      1       |      10      |
-------------------------------
|      1       |      30      |
-------------------------------
|      2       |       0      |
-------------------------------
|      1       |      30      |
-------------------------------
|      2       |       0      |
+++++++++++++++++++++++++++++++

8.6.1.3.2 Syntax

aligned(8) class CompositionOffsetBox extends FullBox('ctts', version = 0, 0) {
    unsigned int(32) entry_count;
    int i;
    if (version==0) {
        for (i=0; i < entry_count; i++) {
            unsigned int(32)  sample_count;
            unsigned int(32)  sample_offset;
        }
    } else if (version == 1) {
        for (i=0; i < entry_count; i++) {
            unsigned int(32)  sample_count;
            signed   int(32)  sample_offset;
        }
    }
}

8.6.1.3.3 Semantics

`version` - is an integer that specifies the version of this box.
`entry_count` is an integer that gives the number of entries in the following table.
`sample_count` is an integer that counts the number of consecutive samples that have the given offset.
    sample_offset is an integer that gives the offset between CT and DT,
    such that CT(n) = DT(n) + CTTS(n).

**/

#[derive(Debug, Clone)]
pub struct CTTS_Entry_Offset {
    sample_count: u32,
    sample_offset: i32
}

#[derive(Debug, Clone)]
pub struct Ctts {
    header: Header,
    entry_count: u32,
    entries: Vec<CTTS_Entry_Offset>
}

impl Ctts {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        header.parse_version(f);
        header.parse_flags(f);
        // let curr_offset = f.offset();
        // f.seek(curr_offset+header.data_size);

        let version: u8 = header.version.unwrap();

        let entry_count = f.read_u32().unwrap();
        let mut entries = Vec::new();

        for _ in 0..entry_count {
            let sample_count: u32 = f.read_u32().unwrap();
            let mut sample_offset: i32 = 0;

            if version == 0u8 {
                sample_offset = f.read_u32().unwrap() as i32;
            } else {
                sample_offset = f.read_i32().unwrap();
            }

            entries.push(CTTS_Entry_Offset{
                sample_count: sample_count,
                sample_offset: sample_offset
            });
        }

        f.offset_inc(header.data_size);
        Ok(Ctts{
            header: header,
            entry_count: entry_count,
            entries: entries
        })
    }
}

#[derive(Debug, Clone)]
pub struct Cslg {
    header: Header
}

impl Cslg {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        header.parse_version(f);
        header.parse_flags(f);
        let curr_offset = f.offset();
        f.seek(curr_offset+header.data_size);
        f.offset_inc(header.data_size);
        Ok(Cslg{
            header: header
        })
    }
}

#[derive(Debug, Clone)]
pub struct Stss {
    header: Header
}

impl Stss {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        header.parse_version(f);
        header.parse_flags(f);
        let curr_offset = f.offset();
        f.seek(curr_offset+header.data_size);
        f.offset_inc(header.data_size);
        Ok(Stss{
            header: header
        })
    }
}

#[derive(Debug, Clone)]
pub struct Stsh {
    header: Header
}

impl Stsh {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        header.parse_version(f);
        header.parse_flags(f);
        let curr_offset = f.offset();
        f.seek(curr_offset+header.data_size);
        f.offset_inc(header.data_size);
        Ok(Stsh{
            header: header
        })
    }
}

#[derive(Debug, Clone)]
pub struct Sdtp {
    header: Header
}

impl Sdtp {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        header.parse_version(f);
        header.parse_flags(f);
        let curr_offset = f.offset();
        f.seek(curr_offset+header.data_size);
        f.offset_inc(header.data_size);
        Ok(Sdtp{
            header: header
        })
    }
}

#[derive(Debug, Clone)]
pub struct Mvex {
    header: Header,
    children: Vec<Atom>
}

impl Mvex {
    pub fn parse(f: &mut Mp4File, header: Header) -> Result<Self, &'static str>{
        let children: Vec<Atom> = Atom::parse_children(f);
        Ok(Mvex{
            header: header,
            children: children
        })
    }
}

/**
Box Type : 'mehd'
Container: Movie Extends Box('mvex')
Mandatory: No
Quantity : Zero or one

The Movie Extends Header is optional, and provides the overall duration,
including fragments, of a fragmented movie. If this box is not present,
the overall duration must be computed by examining each fragment.

aligned(8) class MovieExtendsHeaderBox extends FullBox('mehd', version, 0) {
    if (version==1) {
        unsigned int(64)  fragment_duration;
   } else { // version==0
        unsigned int(32)  fragment_duration;
   }
}
**/

#[derive(Debug, Clone)]
pub struct Mehd {
    header: Header,
    fragment_duration: u64
}

impl Mehd {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        header.parse_version(f);
        header.parse_flags(f);
        // let curr_offset = f.offset();
        let mut fragment_duration: u64 = 0;
        if header.version.unwrap() == 1u8 {
            fragment_duration = f.read_u64().unwrap();
        } else {
            fragment_duration = f.read_u32().unwrap() as u64;
        }
        // f.seek(curr_offset+header.data_size);
        f.offset_inc(header.data_size);
        Ok(Mehd{
            header: header,
            fragment_duration: fragment_duration
        })
    }
}

#[derive(Debug, Clone)]
pub struct Trex {
    header: Header
}

impl Trex {
    pub fn parse(f: &mut Mp4File, mut header: Header) -> Result<Self, &'static str>{
        header.parse_version(f);
        header.parse_flags(f);
        let curr_offset = f.offset();
        f.seek(curr_offset+header.data_size);
        f.offset_inc(header.data_size);
        Ok(Trex{
            header: header
        })
    }
}


text:
BOWA-electronic GmbH & Co. KG
72810 Gomaringen | Germany
Phone +49 (0) 7072-6002-0
E-Mail: info(at)bowa.de
Internet: www.bowa-medical.com
Personally liable partner:
Authorized representative and Managing Directors:
Jens Kröber, Martin Heinrich
Registry Court:
Amtsgericht Stuttgart
Registry number:
HRA 381478
Value-added tax identification number pursuant to § 27 a UstG (Value Added Tax Act):
Registration number of the Foundation (EAR)
WEEE Reg. No. DE 87419592
Responsible for the content pursuant to § 10 Par. 3 MDStV (State Treaty on Media):
Tobias Bühler
Conception and realisation:
Merzljak Healthcare Marketing W/V GmbH, Bonn, Germany, www.merzljak.de
Liability for site content
We have taken great care in compiling the content of our website. Nevertheless, we accept no liability for the correctness, completeness and up-to-date status of the content. According to general legal provisions, we as a service provider are responsible for our own content on this site pursuant to § 7 Par.1 TMG [German Telemedia Act]. Pursuant to §§ 8 – 10 TMG, service providers are not obliged to monitor any third party information which may have been transmitted to or stored on their site, nor to research any circumstances which may indicate illegal activity. General legal provisions governing our obligation to remove or bar the use of information shall remain unaffected by this. In this context, liability does not commence until such time as specific infringement becomes known to us. As soon as we obtain knowledge of any such infringement, the respective content shall be removed immediately.
Our website contains links to external, third-party websites, the content of which is beyond our control. Therefore we cannot accept any liability for such external content and emphasize that the respective provider or operator is responsible for the content of any linked sites. At the time of linking, sites are checked for possible legal infringement. No illegal content was found at the time the links were set. However, permanent monitoring of linked sites involves an unreasonable amount of effort, except when there is specific indication of legal infringement. If any such infringement becomes known to us, the respective link shall be removed immediately.
The content and works on this web site as compiled by the site operator are subject to German copyright law. Duplication, further processing and editing, distribution and any kind of utilization whatsoever beyond the limits set by copyright law require the written permission of the respective author and/or creator. Downloading and copying of site contents are only permitted for private, non-commercial use. The copyrights of any third person(s) to site content which was not compiled by the operator shall be respected. In particular any content which is subject to third-party copyright shall be marked as such. We would kindly request you to inform us immediately of any copyright infringement that you may become aware of. As soon as any legal infringement becomes known to us, we shall remove such content immediately.
All images within this domain/site are protected by copyright or other intellectual property rights and may not be used or reproduced without the express written permission of the rights holder. All image rights, with the exception of the names listed here © unpict – stock.adobe.com © k_yu – stock.adobe.com, are held by the respective owner or their representative or by Merzljak W/V.
BOWA MEDICAL | BOWA-electronic GmbH & Co. KG | Heinrich-Hertz-Strasse 4-10 | 72810 Gomaringen | +49 (0) 7072-6002-0
STBs


I have done absolutely nothing this weekend, except play nurse to my husband, who is down with high fever for the past 2 days.
Men are such whiny babies when they are sick! The Macho He-Man has refused to let me take his temperature, so I don't know how high the fever has gone up to. I am trying to monitor it but he is making it so difficult.
All the eye-rolling aside, I am worried. He is constantly dozing off but is unable to sleep for long periods of time, waking up whenever his body switches between hot and cold. One minute, he would be shivering under the many layers of comforter, and the next minute, he would kick them all off and complain that the bedsheets were too hot.
I am exhausted! I may pout and feel sorry for myself (a lot!) when I'm sick, but I've never been such a pain to look after (I think)… 😛 If his fever still persists tomorrow, I will have to drag him, kicking and screaming, to the doctor. That'll be fun, I'm sure.
I hope everyone had a better weekend than I did!


This book seeks to weave an understanding of "the causes of social and political disintegration" in the United States as the author perceived them in 1973. It explores post-WW II history with an upfront purpose and that makes it different. Critical of the academic bifurcation of domestic and foreign policies as somehow discreet entities, Jezer underscores causal links between them. For instance, the oil embargo of 1973 cannot be fathomed without reference to the 1953 CIA coup detat against President Mohammed Mossadegh in Iran for the sin of oil nationalism followed by the installation of U.S.-friendly Shah Reza Pahlavi. Similarly, one can see a source for civil war in Guatemala through the 1970s as a consequence of the CIA's 1954 overthrow of President Jacobo Arbenz for launching a land reform program. When these events occurred neither was honestly reported in the United States. Obviously both actions were covert. Rather the episodes were folded into a Cold War narrative that portrayed nearly all foreign events as advancements of U.S.-sponsored democratic progress in the world.
The middle third of Jezer's book illuminates the fuzzy contours of American society through the foundational years of Cold War, hence the book's title, The Dark Ages.It reads today almost as dark comedy but was the fabrication of a society driven by suburban consumerism masking social repression. Racism, sexism and anti-Commu nism bound together into a totem of national taboo. African-Americans lived under Jim Crow, women belonged in the home and politics challenging either were marked as Communist. Upon this social structure the military-industrial complex built the biggest empire in history in order to maintain the extreme imbalance of American material consumption in which 5 percent of the world's population consumed 50 percent of the world's good. Nevertheless, the actuality of empire contradicted the cover story of global democratic development which opened many unguarded spaces into which America's creative contrarians walked.
The last third of The Dark Ages focuses on the ebulliently contrarian manifestation of the Beats in the 1950s. Ginsburg, Kerouac, Cassidy and the women who ran with them developed a flip-side to the decade that later flourished into the 60s counterculture. The Beats rebelled against suburbia, the nuclear family and nukes. They hammered out jazz poetry and mystical syllogisms, wore berets, and smoked marijuana with black musicians. They were easily dismissed by the establishment and deeply embraced by people on the margins. Their message foreshadowed the upheavals of Civil Rights, Vietnam, feminism and gay rights. Their alienated social style became the model of youthful rebellion ever since.


text:
Aurea Regina Gallery
Gold coins (16)
Silver coins (222)
Good Luck! (21)
The Year of the Rabbit 2023 (16)
Year of the Tiger 2022 (7)
New born baby (23)
Signs of Zodiac (31)
Boats and ships (4)
The Year of the Ox (4)
Arriving soon! (7)
Last Change (46)
Base metal coins (36)
2 € commemorative coins (86)
Coin set (27)
Coin Albums (145)
€ coin albums (29)
Stamp albums and accessories (5)
ENCAP - for encapsulated coins (11)
Coin boxes (42)
Coin capsules (75)
Coin cleaning detergents (7)
Magnifiers and microscopes (26)
Coin-holders and accessories (20)
Gift packages (6)
... all brands ...
Home » Last Change
Sort By: Position Name (A-Z) Name (Z-A) Code (A-Z) Code (Z-A) Cheap first Expensive first Newer first Older first In Stock first
Display: as list / as grid
"200th anniversary Napoléon Bonaparte" Djibouti 250 Fr 2021 99,9% silver coin, 5 oz Silver
Year :2021
Face Value: Djibouti250 Francs
Silver: 99.9%.
Weight: 155.5 g (5 oz)
Size: 4.8 x 72 x 62 mm
Quality: Prooflike
Mintage: 500 pcs
This 5 Oz Silver coin is dedicated to Napoleon Bonaparte, a French statesman and military leader who led many successful campaigns during the French Revolution. The coin has a Proof quality, a special Napoleon shape, a selective Gold Plating and a very detailed design. It comes in a case, along with the Certificate of Authenticity. Limited mintage to 500 pcs.
James Bond - A View to a Kill Tuvalu 1/2$ 2022 coloured 99,9% silver coin. 15,53 g.
Silver: 99.99%
Nominal value 0.5TVD
Weight: 15.553g
Dimensions: 32.60 mm
Maximum Mintage 12,007
Coin Finish Proof
Created by former intelligence officer and author Ian Fleming in 1953, James Bond is a fearless, charismatic and deadly British Secret Service agent with a 'licence to kill'. Also known by the codename 007, he has been portrayed by six actors – Sean Connery, George Lazenby, Roger Moore, Timothy Dalton, Pierce Brosnan and Daniel Craig – in 25 thrilling movies released by EON Productions since 1962.
Diamonds Are Forever design
In Diamonds Are Forever, released in 1971, Bond tracks SPECTRE boss Blofeld to the US where he discovers his evil nemesis is stockpiling diamonds to power a space-based laser weapon. Played by Sean Connery, 007 must neutralise the satellite and prevent the supervillain from carrying out his latest threat to global stability.
The coin's reverse depicts a coloured illustration of James Bond, the charismatic Secret Service agent. Based on an official movie poster, the design also features a moon buggy 007 uses to escape across the Nevada Desert. Included on the reverse are the iconic gun barrel graphic from the franchise's signature opening sequence, the famous 007 gun logo and the inscription 'DIAMONDS ARE FOREVER'.
Branded display packaging and numbered certificate
Individual releases from the James Bond Official 25-Coin Collection are each housed in a 007 branded case with a transparent acrylic top and a movie themed shipper. Each coin is accompanied by a Certificate of Authenticity featuring poster artwork.
James Bond - Casino Royale Tuvalu 1/2$ 2022 coloured 99,9% silver coin. 15,53 g.
James Bond - Diamonds are Forever. Tuvalu 1/2$ 2021 coloured 99,9% silver coin. 15,53 g.
James Bond - Die Another Day Tuvalu 1/2$ 2022 coloured 99,9% silver coin. 15,53 g.
James Bond - GoldenEye Tuvalu 1/2$ 2022 coloured 99,9% silver coin. 15,53 g.
James Bond - Goldfinger Tuvalu 1/2$ 2021 coloured 99,9% silver coin. 15,53 g.
Goldfinger Design
In Goldfinger, released in 1964, gold magnate Auric Goldfinger is planning an audacious attack on the United States Bullion Depository known as Fort Knox. Played by Sean Connery, Bond must prevent the criminal and his henchman Oddjob from irradiating the facility in order to profit from a resultant gold shortage and economic upheaval.
The coin's reverse depicts a coloured illustration of James Bond and the female character Pussy Galore. Based on an official movie poster, the design also features a hand covered in skin-suffocating gold paint. Included on the reverse are the iconic gun barrel graphic from the franchise's signature opening sequence, the famous 007 gun logo and the inscription 'GOLDFINGER'.
Branded Display Packaging
James Bond - Licence to Kill Tuvalu 1/2$ 2022 coloured 99,9% silver coin. 15,53 g.
James Bond - Live and Let Die. Tuvalu 1/2$ 2021 coloured 99,9% silver coin. 15,53 g.
Coin Finish: Proof
In Live And Let Die, released in 1973, Bond investigates Dr. Kananga, a Caribbean Prime Minister intent on dominating the heroin trade. Played by Roger Moore, 007 pursues Mr. Big, the corrupt official's alter ego, exposing himself to vicious assassins and voodoo magic. But the agent's persistence pays off when Kananga's inflated ambitions are dramatically blown to pieces.
The coin's reverse depicts James Bond, the charismatic Secret Service agent. Based on an official movie poster, the design also represents a tarot card and a fiery explosion. Included on the reverse are the iconic gun barrel graphic from the franchise's signature opening sequence, the famous 007 gun logo and the inscription 'LIVE AND LET DIE' featuring a knife symbol.
Individual releases from the James Bond Official 25-Coin Collection are each housed in a 007 branded case with a transparent acrylic top and a movie themed shipper. Each coin is accompanied by a Certificate of Authenticity featuring poster artwork
James Bond - Quantum of Solace Tuvalu 1/2$ 2022 coloured 99,9% silver coin. 15,53 g.
James Bond - Skyfall. Tuvalu 1/2$ 2022 coloured 99,9% silver coin. 15,53 g.
James Bond - Spectre. Tuvalu 1/2$ 2022 coloured 99,9% silver coin. 15,53 g.
James Bond - Thunderball. Tuvalu 1/2$ 2021 coloured 99,9% silver coin. 15,53 g.
In Thunderball, released in 1965, Bond takes on high-ranking SPECTRE operative Emilio Largo, who holds NATO to ransom by hijacking a Vulcan bomber carrying two nuclear weapons. Played by Sean Connery, 007 must find the bombs hidden underwater in the Bahamas before Largo succeeds in extorting £100 million or carries out his threat to unleash nuclear havoc.
The coin's reverse depicts a coloured portrayal of James Bond in a desperate underwater fight. Based on an official movie poster, he is locked in combat with a with a knife-wielding scuba diver. Included on the reverse are the iconic gun barrel graphic from the franchise's signature opening sequence, the famous 007 gun logo and the inscription 'THUNDERBALL'.
James Bond - Tomorrow Never Dies Tuvalu 1/2$ 2022 coloured 99,9% silver coin. 15,53 g.
"Premium Size Silver Bar - The Majestic Eagle" Fiji 1$ 2019 1 oz 99,9% silver coin
Issuing Country: Fiji
Face Value: 1 Dollar
Silver: 99,9%
Diameter: 90 x 137 mm, 11 mm Height
Year Date: 2019
Special Feature: Special Stage Minting
Mintage 2,019
FIJI - 2019 PREMIUM SIZE SILVER BAR - THE MAJESTIC EAGLE
THE LARGEST 1OZ SILVER COIN BAR IN THE WORLD
Special minting technique: More than 9 times larger than an usual 1oz Silver bar!
The iconic Eagle pictured in front of a breathtaking scenery!
Strictly limited to only 2,019 pieces worldwide!
Fiji 2019
"Spartan Helmet". Solomon Islands 10$ 2021. 99,9% silver coin with antique bronze finish, 300 g.
Silver: 99.9%
Measures: 110 x 63,5 mm
Quality; Antique bronze finish
Issuing Country: Solomon Islands
Mintage: 300
Face Value: 10 Dollars
Impressive 3D shape finished with Antique Bronze Finish
Weight and limitation are based on the epic battle of the 300 Spartans, that fought 2,500 years ago against the Persians in the Battle of Thermopylae!
The abrasion and damages from the legendary fights of the Spartans are incorporated into the design of the helmet.
The round shaped packaging constitutes the look of a Spartan shield.
Amaterasu Divine Faces of the Sun 3 oz Antique finish Silver Coin 5$ Niue 2021
Nominal value 5 $
Dimensions: 55 mm
Maximum Mintage 7,500
Finish: Proof
Amaterasu Omikami is translated from Japanese as "Great Divinity Illuminating Heaven". In Japanese mythology, Amaterasu is a celestial sun goddess and important Shinto deity. She symbolizes fertility and makes plants grow, which give life not only to humans but also to the gods. As the guardian of the Japanese people, she is represented by the emblem of the rising sun on the Japanese flag.
The coin wonderfully depicts Amaterasu, who is holding the mirror in her hands. This mirror reflects the divine origin of the sun goddess. Such decorations as an amber inset and gilding elements give a perfect touch to the design of this coin.
Bohemia Glass 99,9% Silver coin proof 2016, 62,2 g
Face calue: 1 000 Fr
date of issue; 2016
Weight: 62,2 g
Quality; Proof
Mintage: 999 tk
We can be proud of the Czech glass - our craftsmen became famous throughout the world and it still has the sound of a prestigious product with an exceptional quality of. Therefore it is entitled to the second issue of the series of silver coins representing the historical milestones in glass manufacture.
The first written mention of glass production in Bohemia dates back to the 1162. The most glorious period of Czech glassmaking, however, occurred in the 17th and 18th centuries, when the Baroque craftsmen made the first Czech crystal. Their extraordinary discovery overshadowed, until then, the unequaled Venetian glass (to which was dedicated the first issue of this series) and have gained an unrivaled position in the European markets. Although their secrets were eventually revealed, the Czech glass conquered the world. The Czech crystal chandeliers hung in the courts of rulers such as Louis XV., Maria Theresa or Elizabeth I Petrovna. Jablonec nad Nisou in North Bohemia played an important role in glass expansion, when at the end of the 19th century they produced 65% of the world's production of glass jewellery. The field employed over 30,000 workers. The 20th century also began magnificently for the region, when for the year 1911, the Jablonec entrepreneurs handed over taxes to the Habsburg monarchy of the same amount as all the Crown land of Dalmatia put together. At the end of the 20th century, the glass Jablonec nad Nisou also became the city of coinage - it is now the seat of the Czech Mint.
The coin, prepared by the German company Numiscom in cooperation with the Czech Mint and the Jizera company Glass Pesničák, consists of two parts. The first takes the form of a ring minted from two ounces of pure silver. The reverse side of the ring bears the inscription BOHEMIA GLASS and the decorative motif performed in the style of Cubism of Prague. The obverse of the ring is dedicated to the attributes of the issuer of the coin - the emblem of the Republic of Congo, the year of issue 2016 and the nominal value of 1000 FRANCS CFA. The center of the coin then consists of glass of red color with a motive, which is a typical example of the skill of North Bohemian glass makers.
Thanks to authentic workmanship, no two coins are the same. A part of each coin are a refined frame and a booklet in English, which tells the story of this unique issue.
Centenary of The Salzburg Festival. Austria 20€ 2020 92,5% silver coin 22,24 g
Date of Issue 22 January 2020
Quality Proof
Face Value: 20 Euro
Coin Design: Mag. Helmut Andexlinger
Total Weight 22.42 g
Packaging Comes in a case complete with a numbered certificate of authenticity and protective slipcase
One of the world's leading opera, theatre and classical music festivals, the Salzburg Festival celebrates its centenary in 2020. Featuring opera, theatre and classical concerts, the Salzburg Festival offers a broader spectrum of cultural variety than any other. To celebrate this major cultural event, which is constantly in the process of reinventing itself, we have come up with a particularly innovative coin design.
On 22 August 1920, the director Max Reinhardt staged Hugo von Hofmannsthal's morality play Jedermann in Salzburg's Domplatz (Cathedral Square) for the first time and in doing so
founded the Salzburg Festival. Since 1926, the play has been a permanent feature of the festival programme, a tradition interrupted only during the Nazi regime. Those who stage or direct Jedermann in Salzburg's Domplatz have reached the pinnacle of their career.
In addition to Max Reinhardt and Hugo von Hofmannsthal, the composer Richard Strauss was also involved in the founding of this magnificent celebration of the performing arts, which did not take long to become established and achieve world renown. At Salzburg, the best is often not good enough. This gives the festival cultural relevance, which comes from its strength of tradition but also allows new directions to be explored and puts the avant-garde centre stage. This very special centenary coin is avant-garde itself. With an obverse that has the appearance of a plate with a flat inner part, a coin of this type has never been minted before. We believe it does the Salzburg Festival justice.
David Bowie Music Legends United Kingdom 1£ 2020 99,9% silver coin 15,71g
Denomination: £1
Maximum Coin Mintage: 15000
Fine Silver 99.9 %
Weight 15.71 g
Diameter: 27.00mm
Reverse Designer Bradley Morgan Johnson
Obverse Designer Jody Clark
Born in Brixton, South London, in 1947, David Bowie began life as David Robert Jones. By the time he was 19 he had taken on his iconic name and was taking the first steps in one of the most innovative and influential careers in the history of sound and vision. His music electrified generations, and his perpetual state of reinvention kept music fans enthralled.
The third coin in our Music Legends collection celebrates rock's definitive chameleon with a design inspired by an image of the singer from his time spent living and recording in Berlin. The inclusion of the lightning bolt motif from the Aladdin Sane era captures Bowie's career journey, and the moment he finally put aside the props to emerge as an artist in his own right.
Available as limited-edition precious metal Proof editions and a standard Brilliant Uncirculated edition, the Brilliant Uncirculated edition is also available with three different slipcase covers, exclusively available from The Royal Mint and are a fitting tribute to the career of one of British music's most enduring icons.
Reg.Code: 14188546
Vana-Viru 5, 10111 Tallinn, Estonia


Woodbourn is situated at Cressy, in Northern Tasmania in a picturesque valley between two mountain ranges. It is a very productive area with an irrigation scheme through the centre and beef, sheep and cropping the main industries. Located near Launceston and the airport and the overnight ferry terminal, Woodbourn is ideally situated for interested cattle breeders to visit the area and enjoy all the attractions Tasmania has to offer. Wineries, mountains, trout fisheries, sea horses, rivers and history are all combined in this fascinating region.
Woodbourn is owned and run by Charles Wallace who began breeding Murray Grey cattle as a teenager in 1969 and has maintained a passion for Murray Greys ever since. His dedication to the breed has remained steadfast, as has his adherence to a strict set of breeding objectives.
With a natural eye for the type and style of cattle which Charles believes the industry needs, any new genetics introduced to Woodbourn must fit a strict set of criteria to ensure the continuation of a 'line' of cattle. This consistency of type in the Woodbourn herd enables Charles to produce an even line of bulls each year and to give buyers confidence in selecting a quality young sire from anywhere in the offering.
In 1990 Woodbourn wanted a new challenge in their cattle enterprise and Angus cattle were an obvious choice, as they complemented their existing Murray Grey Stud. A preference for Angus and Murray Greys over all other breeds in feedlots, is common knowledge and their carcase success is unequalled. In forming the Woodbourn Angus Stud, Charles Wallace secured females from the Creekton Stud; a stud well respected for quality, soundness and temperament. Charles Wallace was already a well known stud cattle breeder with years of experience behind him, and with his skilled eye and a strict breeding program, has developed an enviable line of cattle.
As breeders of Angus cattle, Woodbourn sees these as exciting times. There is great optimism for the Angus breed; it has its own brand, its progeny command premium prices. The Angus Society has increased market demand, increased production, increased efficiency of production, and has made ever increasing advances in technology and marketing effectiveness to the point where the Angus Society enables commercial and seedstock producers to be winners in the Australian Beef Industry.
Woodbourn sees itself as being strategically placed to benefit from such strength and plans to continue its balanced breeding program, producing cattle which are moderate to large framed, quiet, structurally sound, have all important doing ability and have strong, well balanced Breedplan figures.
Charles and Janet Wallace are pleased to have Lauchie Cole (son-in-law) with them at Woodbourn. Lauchie has been here for four years and is a tower of strength on the property with his enthusiasm, his ability to pick up the genetics, his cooperation and skill with birth weighing, NLIS records and the selection of stock.
During 2010, with our continued support of the mid year Marcus Oldham student program, we had the pleasure of Darcy Kilmartin at Woodbourn. Not only have we been able to assist in his learning but we have been delighted to have such an energetic, enthusiastic young man assist us this year.
This year we have been pleased to have Darcy Nicklason join us. He is an enthusiastic, energetic and likeable young man who, at the moment, is training his horse for the gruelling 160km Tom Quilty to be held in Tasmania 2012.


text:
Siddharth Jain
Slow Train running Uncharted Sea - fishing grounds, Mumbai Date with Elephants and more at Sonepur Mela Sleepless Nights, Cambodia Daily Prayers Urban Poverty in Srinagar
Singles Travel Features
Along the coast - Srilanka Bursting colours at Holi in Braj Long way South - Kerala Of Nagas, Haridwar and Kumbh Mela How we blossomed: a trek to Valley of Flowers Notes from the bosphorus
Wedding features
An Indian tale A Turkish delight
Long term project
Action Aid, Bihar Seeds
Testimonials/Feedback
Misc Menu
Happy Camera Club
Classroom Activities From our exhibitions News
Uncharted Sea - fishing grounds, Mumbai
It seems like an idyllic lifestyle….head to the sea and catch fish…share the spoils and then sell the rest…..have a relaxed evening and then head next morning for another day at sea….till you venture deeper into their lives and realize there is much more than seen on surface life…more problems in form of stagnating water due to rains, not safe drinking water, issue of housing, depleting level of fish at sea and so on yet they live as a close unit, thoroughly enjoying their lives……right from the dogs that are lazy enough to let the fat cat pass ,to the rats that are larger than lives and infest the area with ease and smoothness of single malt…..a single road separates the Kolis, the Marathi speaking fishing community from commonly the Kathwadi community which comes from Gujarat….A few bus routes will take you to Versova, beach-village in Mumbai (Bombay) located in the suburb of Andheri where the community is based.
From my early days of wandering around the village with no access to finally being invited over for drinks and getting tips on where to shoot I faced a barrage of questions both from the community (usual being where I am from? Which newspaper? Why am I taking these images? Is Delhi better or Bombay? ) to sometimes being questioned by me (internal doubts like should I go back? What is the purpose? I should get a proper job?)
Today there is a big football match within the community….Football is more than a sport in this side of city, is played and followed religiously which is surprising in a cricket frenzy nation…..there are doubts though of the match for the sea is roaring and a thick patch of clouds is dangling over us waiting to pour …but everyone must take their chances…At night a few will gather together and fit in one room to play cards and will polish off feni, the local drink…its quite potent but the fishermen drink it with ease like no tomorrow….though most of the community is poor many being immigrants from south and central India one can still distinguish the rich ones from the poor…the first sign of course is having a television in house which is in working condition…and still if one is rich enough you will see an mini aquarium placed gently in one corner of the wall…..still the lads are well built and smart and handsome and they dress well despite all odds….the usual conversation between them ranges from arranging money for football gear, to family, to who's hottest of bollywood stars and so on, they are an enjoyable company…..
But tonight I will head to the local bar which is a celebration of sorts and much expensive to drink than usual Feni at home where I will meet interesting characters like Mr. Patel who offers me a job in Dubai and also Irfan Khan, or Irfan bhai who at first don't like my entry to the bar but later becomes best of friends….of course both of us are drunk……but I realized there is a corner of the land which I understand more…..
This is a photo essay on the fishing community that live on the edge of sea in Versova region of Bombay. Most of them live in poverty without much civic amenities in the non –flashy side of Bombay. Many are migrants and most of them take up odd jobs besides fishing to survive which they say have lessened in course of time because of climate change.
Copyright © 2020 siddharthjain.co.in. All images and text are copyrighted and should not be reproduced
without written permission | one.phish[at]gmail[dot]com.